Удалить все строки, которые не начинаются как минимум с 3 цифр - PullRequest
0 голосов
/ 27 мая 2018

Удалить все строки, которые не начинаются как минимум с 3 цифр.Я использую команду ниже sed, но она также удаляет заголовок.

Как запустить команду ниже строки из строки 2, чтобы заголовок остался без изменений.

sed -n '/^[0-9]\{3\}/p' my_file

Я использовал ниже какхорошо но не работает.

sed -n '2,${/^[0-9]\{3\}/p}' my_file

Ответы [ 4 ]

0 голосов
/ 28 мая 2018

Это может работать для вас (GNU sed):

sed -i '1b;/^[0-9]\{3\}/!d' file

Не обрабатывать первую строку.Если после этого какая-либо строка не начинается хотя бы с 3 цифр, удалите ее.Параметр

NB -i заменяет содержимое старого файла измененным файлом.Если несколько файлов размещены в соответствии с командами sed, они будут обрабатываться отдельно, т.е. заголовок каждого файла останется.Для достижения того же эффекта без перезаписи файлов используйте параметр -s.

Другой способ:

sed '/^[0-9]\{3\}/b;1!d' file
0 голосов
/ 27 мая 2018

Ты почти у цели.Все, что вам нужно сделать, это:

sed -e '2,${/^[0-9]\{3\}/d}' my_file

Это начнет выполнение скрипта, начиная со второй строки (исключая первую, которая, как я полагаю, является названием, о котором вы говорите).

0 голосов
/ 28 мая 2018

Для переносимости , попробуйте:

sed -n '1p;2,${/^[0-9][0-9][0-9]/p}' my_file

или sed -in '1p;2,${/^[0-9][0-9][0-9]/p}' my_file, чтобы редактировать my_file напрямую.

0 голосов
/ 27 мая 2018

Использование awk:

$ cat foo
Title
11 test
222 test
test
$ awk '/^[0-9]{3}/ || NR==1' foo
Title
222 test

Редактировать: Заголовок первой строки.Так что эта команда должна начинаться со строки № 2.

$ awk '/^[0-9]{3}/ || NR>1' foo
222 test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...