1

我有一个类似的问题: Delete lines from file with SED or 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 回答 4

4

您可以使用 awk范围模式跳过匹配模式 1 到模式 2 的行:

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

我对字段$1而不是正则表达式进行数值比较,例如/^3/因为它也会匹配“30”、“31”等。

如果数字是该行的第二个字段(如您编辑的示例输入中),只需更改$1$2. 让我知道这是否适合您。

于 2011-11-15T11:08:47.563 回答
3

一个快速的谷歌给了我这个作为秒的答案:

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/范围。

于 2011-11-15T11:00:52.960 回答
1
awk '/^3/ {del=1}
     (del==0) {print}
     /^5/ {del=0}' FILE
于 2011-11-15T11:01:58.250 回答
0
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
于 2011-11-15T11:55:26.790 回答