我正在使用看起来像这样的csv文件
KMGM more words and things
7HSQ other more words and stuff
JHGQ8 even more other stuff
KH21 and more stuff
唯一有效的行是第一个单词是一个字母,后面跟着正好三个可能是字母或数字的字符。在上面的示例中,包含KMGM
和KH21
的行有效。我想用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中制定这个。昨天我遇到了类似的问题,但行的长度恰好是四个字符。现在我们添加了信息,行的长度各不相同。
答案 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
中。