我有一个文件,每行有一个单词/字符。例如:
a
abandonado
esta
estabelecimento
o
onibus
c
casa
police
我需要删除具有特定模式的行(例如模式“esta”)。我试过用awk
cat file | awk '!/^esta/'
但是此解决方案也删除了带有模式"esta"
和"estabelecimento"
的所有行。我只需要删除特定模式"esta"
不符合"estabelecimento"
的行。
包含模式"o"
和"a"
的行会出现同样的问题。该命令将删除所有以此模式开头的行。
答案 0 :(得分:7)
使用grep
简单:
grep -v -w esta file
-w
选项匹配“仅限单词”/“确切单词”:正是您需要的内容-v
选项反转匹配:仅打印不匹配的行答案 1 :(得分:4)
你的想法是正确的,^
匹配模式的开头,通过匹配模式结束的$
来完成它,以便整个单词匹配,因为它是
awk '!/^esta$/' file
a
bandonado
estabelecimento
o
onibus
c
casa
police
答案 2 :(得分:3)
由于您的文件由只有一列的行组成,因此您可以检查列是否与字符串匹配。
这消除了对锚^
,$
:
$ awk '$1 != "esta" {print}' file
a
abandonado
estabelecimento
o
onibus
c
casa
police
答案 3 :(得分:2)
您也可以根据this问题sed
执行此操作:
$ cat test.txt
a
abandonado
esta
estabelecimento
o
onibus
c
casa
police
。
$ sed '/^esta$/d' test.txt
a
abandonado
estabelecimento
o
onibus
c
casa
police
grep
更简单,但sed
可以为您提供更大的灵活性,具体取决于您的使用案例&每个人的舒适程度。