我有一个大文本文件,每行有数千个单词。
如何删除所有以大写字母开头的行和所有只是一个字母的行。
A -> To be deleted
a -> To be deleted
abjurer
abkar
abkari
Abkhas -> To be deleted
Abkhasian -> To be deleted
ablach
ablactate
ablactation
B -> To be deleted
b -> To be deleted
Bounce -> To be deleted
...
...
是否可以使用Bash执行此操作。
感谢。
答案 0 :(得分:7)
您可以使用:
grep -Ev '^([A-Z]|.$)' file
abjurer
abkar
abkari
ablach
ablactate
ablactation
或者使用sed来保存更改:
sed -i.bak -r '/^.$|[A-Z]/d' file
答案 1 :(得分:5)
我会说:
$ awk 'length($0)>1 && !/^[A-Z]/' file
abjurer
abkar
abkari
ablach
ablactate
ablactation
这会检查字符串:
您也可以关注hek2mgl's good suggestion并使用!/^[[:upper:]]/'
代替!/^[A-Z]/
,而不是依赖于您的语言区域。
答案 2 :(得分:5)
awk '!/^([[:upper:]]|[[:alpha:]]$)/' file
grep -Ev '^([[:upper:]]|[[:alpha:]]$)' file
sed -r '/^([[:upper:]]|[[:alpha:]]$)/d' file
答案 3 :(得分:4)
我会使用sed
:
sed '/^.$/d;/^[[:upper:]]/d' file
这是由;
分隔的两个命令。第一个删除仅包含单个字母的行,第二个删除以大写字母开头的行。我真的鼓励您使用[[:upper:]]
而不是[A-Z]
来使其独立于您的语言环境。