Bash脚本删除文件中的一行

时间:2016-08-27 13:29:16

标签: bash awk sed

我有一个文件,它有多行。

例如:

a
ab#
ad.
a12fs
b
c
...

如果该行包含符号或数字,我想使用sedawk删除该行。 (例如,我想删除:ab#,ad。,a12fs .... lines) 换句话说,我只想保留包含[a-z] [A-Z]的行。

我知道如何删除数字行,

sed '/[0-9]/d' file.txt

但我不知道如何删除符号行。

或者有任何简单的方法可以做到这一点?

4 个答案:

答案 0 :(得分:2)

要保留空白行:

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

删除空行:

grep '^[[:alpha:]]+$' file
sed -E -n '/^[[:alpha:]]+$/p' file
awk '/^[[:alpha:]]+$/' file

答案 1 :(得分:1)

grep也运行良好,甚至更简单:只需反过来:保留您感兴趣的行,这样更容易定义

grep -i '^[a-z]*$' file.txt

(匹配仅包含字母和空行的行,-i选项使grep不区分大小写)

也删除空行:

grep -i '^[a-z]+$' file.txt

使用Windows文本文件时要小心,因为在行尾有一个回车符,所以根据grep版本没有任何匹配(在Windows上测试它可以正常工作)

但以防万一:

grep -iP '^[a-z]*\r?$'

(注意启用perl表达式的P选项或\r无法识别)

答案 2 :(得分:1)

您可以使用此sed

sed '/^[A-Za-z0-9]\+$/!d' file

(OR)

sed '/[^A-Za-z0-9]/d' file

答案 3 :(得分:1)

$ awk '!/[^[:alpha:]]/' file.txt
a
b
c