我有一个文件每行一个字/字符。 例:
a abandonado esta estabelecimento o onibus c casa police
我需要删除特定模式的行(例如模式“esta”)。 我试着用awk
cat file | awk '!/^esta/'
但是这个解决scheme也删除了所有模式为"esta"
和"estabelecimento"
。 我只需要删除具有特定模式"esta"
行不符合"estabelecimento"
。
模式"o"
和"a"
的线条也会出现同样的问题。 该命令删除以此模式开始的所有行。
简单的使用grep
:
grep -v -w esta file
-w
选项匹配“仅字”/“确切字”:正是你所需要的 -v
选项反转匹配:只打印不匹配的行 你的想法是正确的, ^
匹配模式的开始,完成匹配$
为模式结束,以便整个词匹配,因为它是
awk '!/^esta$/' file a bandonado estabelecimento o onibus c casa police
由于你的文件由只有一列的行组成,你可以检查列是否与字符串匹配。
这消除了需要锚点^
, $
:
$ awk '$1 != "esta" {print}' file a abandonado estabelecimento o onibus c casa police
根据这个问题你也可以用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
可以给你更多的灵活性,取决于你的使用情况和舒适度。