sed / RegEx /, ~ N формат адреса

3
$ sed '/b/,~8 d' a-i.txt

Я знаю, что он делает. Но они говорят «кратное 8» для ~ 8. Почему это выражается как «кратное 8»?

    
задан Smile 30.12.2017 в 09:01
источник

1 ответ

5

/b/,~8 соответствует строкам, начинающимся с строки, содержащей b , и продолжается до тех пор, пока не будет достигнута линия, номер строки которой кратен 8

От man sed :

  

addr1,~N
   Будет соответствовать addr1 и строки, следующие за addr1 , до следующей строки, номер строки ввода которой кратен N .

Примеры

Это печатает любую строку, содержащую 5 , и все следующие строки до следующей строки, номер строки которой кратен 8:

$ seq 14 | sed -n '/5/,~8 p'
5
6
7
8

Это печатает из строки, содержащей 14, на следующую строку, номер строки которой кратен 8:

$ seq 22 | sed -n '/14/,~8 p'
14
15
16

Это удаляет все строки, начинающиеся с строки, совпадающей с 5 и заканчивающейся следующей строкой, номер строки которой кратен 8:

$ seq 10 | sed '/5/,~8 d'
1
2
3
4
9
10

Аналогичные, но разные

Затем выводится четвертая строка и каждая последующая строка:

$ seq 22 | sed -n '4~8 p'
4
12
20

Это печатает строку, соответствующую 4 и следующим следующим строкам:

$ seq 13 | sed -n '/4/,+3 p'
4
5
6
7
    
ответ дан John1024 30.12.2017 в 09:09
источник