(sed)如果任一条件为真,则删除整行

时间:2015-07-23 15:33:46

标签: sed

我正在使用看起来像这样的csv文件

KMGM more words and things
7HSQ other more words and stuff
JHGQ8 even more other stuff
KH21 and more stuff

唯一有效的行是第一个单词是一个字母,后面跟着正好三个可能是字母或数字的字符。在上面的示例中,包含KMGMKH21的行有效。我想用sed删除其他的。

我只是想说出一个条件,

IF first character is not a letter OR 
   fifth character is not a space OR 
   characters two, three, or four contain 
       anything other than an uppercase letter or a number
THEN
    delete the entire line

我只是不知道如何在sed中制定这个。昨天我遇到了类似的问题,但行的长度恰好是四个字符。现在我们添加了信息,行的长度各不相同。

1 个答案:

答案 0 :(得分:3)

这可能适合你。

sed -n '/^[A-Z][A-Z0-9]\{3\} /p'

相反删除,只保留符合您所有条件的行。像这样:

IF first character is a letter AND
   fifth character is a space AND
   characters two, three, or four contain 
       an uppercase letter or a number
THEN
    keep (print) the line
  • /p如果正则表达式匹配则执行打印
  • -n避免打印

如果要就地编辑文件,可以像这样运行:

sed --in-place=.bak -n '/^[A-Z][A-Z0-9]\{3\} /p' yourfile.csv

它将直接删除您要在文件中删除的行,并将原始文件的备份存储在yourfile.csv.bak中。