使用 sed 删除所有包含特殊字符、数字和空格的行

使用 sed 删除所有包含特殊字符、数字和空格的行

因此,我对使用 shell(特别是 bash)还不太熟悉,我正在编写一个脚本,将包含 DNA 序列的文件转换为更有用的格式。不幸的是,这些文件中的许多文件将包含用于标记信息等的无关行。我需要一个 sed 命令来排除这些包含特殊字符、数字或空格的行。我发现使用以下命令删除带有空格的行相当简单

sed '/ /d' infile

并且我认为使用正则表达式删除包含数字的行将是一种类似的策略。我只是还没有找到任何在 sed 中处理特殊字符的方法。

谢谢

答案1

要删除任何不完全由字母组成的行,您需要添加开始 ( ^) 和结束 ( $) 锚点

sed '/^[[:alpha:]]*$/!d' file

相反,你可以删除任何包含至少一个非字母字符的行

sed '/[^[:alpha:]]/d' file

请注意,插入符号^在这里充当否定运算符,而不是像前一个表达式中那样充当锚点。


或者,使用 grep 的整行(-x--line-regexp)选项

grep -x '[[:alpha:]]*' file

(相当于第一个 sed 表达式)或使用逆匹配(-v

grep -v '[^[:alpha:]]' file

(相当于第二个 sed 表达式)。

答案2

答案取自原帖评论

我想我已经明白了,我只是把我的改成sed这样sed '/[[:alpha:]]//!d' infile——如果逻辑成立的话——应该排除任何包含以下内容的行,除了[A-Za-z]

相关内容