使用awk命令删除具有特殊字符的行

时间:2016-03-17 08:39:19

标签: shell

我有一个带有句子的文本文件,每行都有单词。例如。

Hello 
Hi 
How are you?
%
$
9

我需要从上面的文件中删除包含非文本字符的行。我的输出应如下:

Hello 
Hi 

我正在尝试使用awk命令,如下所示:

awk '!/[%$0-9?]/' filename

我可以为上述文件执行此操作,因为我知道上面句子中的特殊字符。但是,我的文件有一个很难用awk写的特殊字符列表。

我尝试了以下命令,但它保留了包含字母和特殊字符的行。

awk '/[a-zA-Z]/' filename

因此,有人可以建议我如何编写awk命令,只保留那些没有任何特殊字符的行或如何只保留那些只有字母的行。

由于

2 个答案:

答案 0 :(得分:0)

awk '/^[a-zA-Z[:space:]]+$/' yourfile

请注意$用法。

答案 1 :(得分:0)

grep是工作的正确工具

您可以强制C区域设置并报告包含[A-Za-z]范围之外字符的行

LC_ALL=C grep -v '[^[:alpha:]]' file

使用GNU grep,您可能必须通过-a强制它输出行,即使文件看起来是二进制

LC_ALL=C grep -a -v '[^[:alpha:]]' file