Удалить строки из файла - PullRequest
       30

Удалить строки из файла

1 голос
/ 15 ноября 2011

У меня есть вопрос, похожий на этот: Удалить строки из файла с помощью SED или AWK

как я могу удалить строки, которые начинаются с 3 и 5, и все промежуточные в этом файле:

ssadfsadfsdf
asdfsadf
asdfsadf
asdfsadf
asdfsdf
1 z z z lkj klj lkj
2 satan er kaerleikur lkj lkj lkj
3 z z z
4 asdflj asd sdf
5 z z z
6 asdf sdaf asdf
7 z z z lkj lkj lkj
8 sdf safd asdf
9 z z z

Если ответ явно в другом месте, я удалю этот вопрос.

что если это выглядело так:

asd        ssadfsadfsdf
asd        asdfsadf
asd        asdfsadf
asd        asdfsadf
asd        asdfsdf
asd        1 z z z lkj klj lkj
asd        2 satan er kaerleikur lkj lkj lkj
asd        3 z z z
asd        4 asdflj asd sdf
asd        5 z z z
asd        6 asdf sdaf asdf
asd        7 z z z lkj lkj lkj
asd        8 sdf safd asdf
asd        9 z z z

Ответы [ 4 ]

4 голосов
/ 15 ноября 2011

Вы можете использовать шаблон диапазона awk , чтобы пропустить шаблон соответствия строк 1 до шаблона 2:

awk '$1 == 3, $1 == 5 { next }; { print }' INFILE

Я делаю числовое сравнение для поля $1 вместо обычноготакое выражение, как /^3/, потому что оно также будет соответствовать '30', '31' и т. д.

Если число является вторым полем строки (как в отредактированном примере ввода), просто измените $1 до $2.Дайте мне знать, если это работает для вас.

3 голосов
/ 15 ноября 2011

Быстрый Google дал мне это как секундный ответ:

http://www.cyberciti.biz/faq/sed-howto-remove-lines-paragraphs/

$ sed '/WORD1/,/WORD2/d' input.txt > output.txt

Чтобы убедиться, что он соответствует «началу строки», как вы сказали, вы можете начать шаблон с символа ^.

Если вы используете Vim (встроенный в sed), вы можете сделать range command, например:

:/^3.*/,/^5.*/ d

где d - команда удаления, а :/exp1/,/exp2/ диапазон.

1 голос
/ 15 ноября 2011
awk '/^3/ {del=1}
     (del==0) {print}
     /^5/ {del=0}' FILE
0 голосов
/ 15 ноября 2011
awk '$2!~/^[3|5]/' yourFile 

сделает это за вас.

см. Тест ниже:

kent$  echo "asd        ssadfsadfsdf
asd        asdfsadf
asd        asdfsadf
asd        asdfsadf
asd        asdfsdf
asd        1 z z z lkj klj lkj
asd        2 satan er kaerleikur lkj lkj lkj
asd        3 z z z
asd        4 asdflj asd sdf
asd        5 z z z
asd        6 asdf sdaf asdf
asd        7 z z z lkj lkj lkj
asd        8 sdf safd asdf
asd        9 z z z"|awk '$2!~/^[3|5]/'

вывод:

asd        ssadfsadfsdf
asd        asdfsadf
asd        asdfsadf
asd        asdfsadf
asd        asdfsdf
asd        1 z z z lkj klj lkj
asd        2 satan er kaerleikur lkj lkj lkj
asd        4 asdflj asd sdf
asd        6 asdf sdaf asdf
asd        7 z z z lkj lkj lkj
asd        8 sdf safd asdf
asd        9 z z z
...