SED не удаляет строки

Это должно работать:

killall -9 Java
-1
27.05.2014, 05:17
4 ответа

Вы не можете сопоставить символы новой строки с \ n (или чем-либо еще, что вы пробовали) в sed , поскольку sed работает построчно, поэтому новые строки как вы думаете, что они не входят в сферу его работы. Вам нужен специальный оператор $ , соответствующий концу строки:

sed -e '/0$/d'
1
29.04.2021, 00:40

Если вы не хотите также удалять строки, например, заканчивающиеся на WLNY-10 , то вам нужно быть более конкретным, чем даже / 0 $ / , например

sed -r '/\s0$/d' file

или, если GNU sed недоступен

sed '/[[:space:]]0$/d' file

или даже

awk '$NF!=0' file
1
29.04.2021, 00:40

Для удаления строк, содержащих 0 в последнем столбце, попробуйте:

$ sed '/0$/d' file
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH

Ваши решения терпят неудачу, потому что:

  • sed "/ 0 / d" : / 0 / означает, что строка соответствия содержит 0 в любой позиции, поэтому она удалит все ваши входные строки.

  • sed "/ 0 / d" : / 0 / означает, что строка соответствия содержит 0 до и после пробела. Он ничего не сделает, потому что ваш ввод не совпадает.

  • sed "/ \ t0 \ n / d" и sed "/ 0 \ n / d" также не совпадают, потому что вы использовали неправильное регулярное выражение.

Заключение, для совпадения 0 в последнем столбце необходимо использовать / 0 $ / . Вы должны прочитать man sed или любые статьи о регулярном выражении для получения более подробной информации.

Обновлено

Согласно ответу @ steeldriver, я обновляю свой ответ, чтобы сохранить строки, содержащие число, заканчивающееся на 0 :

$ sed '/ 0$/d' cat
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
543000000      77       77       710    10.1 WLNY-10
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH
1
29.04.2021, 00:40

Другая команда awk ,

$ awk '$NF==0 {next;}1' file
591000000      85       85       2      2 CDL (control)
321000000      40       40       109    4.2 COZI-TV
585000000      84       84       8      8 NJTV
585000000      84       84       8134   10 WTBY
543000000      77       77       710    10.1 WLNY-10
585000000      84       84       62     12 N12WC
657000000      101      101      1014   14 OPTCH
0
29.04.2021, 00:40

Теги

Похожие вопросы