我有一个文件,它有多行。
例如:
a
ab#
ad.
a12fs
b
c
...
如果该行包含符号或数字,我想使用sed
或awk
删除该行。 (例如,我想删除:ab#,ad。,a12fs .... lines)
换句话说,我只想保留包含[a-z] [A-Z]的行。
我知道如何删除数字行,
sed '/[0-9]/d' file.txt
但我不知道如何删除符号行。
或者有任何简单的方法可以做到这一点?
答案 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