我有一个大的文本文件,每行上有数千个单词。
我如何删除所有以大写字母和所有只是一个字母的线开始的所有行。
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做到这一点。
谢谢。
您可以使用:
grep -Ev '^([A-Z]|.$)' file
abjurer
abkar
abkari
ablach
ablactate
ablactation
或使用SED保存更改:
sed -i.bak -r '/^.$|[A-Z]/d' file
我会说:
$ awk 'length($0)>1 && !/^[A-Z]/' file
abjurer
abkar
abkari
ablach
ablactate
ablactation
这检查了字符串:
- 长度超过1个字符。
- 不从任何大写字母开始。
您也可以遵循HEK2MGL的好建议,并使用!/^[[:upper:]]/'
而不是!/^[A-Z]/
不依赖您的语言环境。
awk '!/^([[:upper:]]|[[:alpha:]]$)/' file
grep -Ev '^([[:upper:]]|[[:alpha:]]$)' file
sed -r '/^([[:upper:]]|[[:alpha:]]$)/d' file
我将使用sed
:
sed '/^.$/d;/^[[:upper:]]/d' file
这是两个由;
隔开的命令。第一个仅删除仅包含单个字母的线,第二个以大写字母开头的线。我真的鼓励您使用[[:upper:]]
而不是[A-Z]
使其独立于您的语言环境。