因此,我对使用 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]