![使用 sed 删除带有单词的行](https://linux22.com/image/1061547/%E4%BD%BF%E7%94%A8%20sed%20%E5%88%A0%E9%99%A4%E5%B8%A6%E6%9C%89%E5%8D%95%E8%AF%8D%E7%9A%84%E8%A1%8C.png)
我尝试使用sed '/\bpassword\b/d'
并sed "/\<password\>/d"
仅查找包含“密码”的行并将其删除,但是不起作用,该命令还会找到诸如“密码!”或“密码@”之类的单词。
假设我有这些词:
password
password1
password2
password!
password@
password%
password*
我只需要删除包含“password”的行,其他的就不用删除了。目前这两个命令也会删除“password@”、“password%”、“password!”和“password*”。
答案1
如果它们每个单词占一行,则使用 ^ 和 $ 匹配行首和行尾。请考虑以下示例文件foo
:
$ cat foo
password
password!1
password2
2password
使用 sed 匹配行首和行尾仅替换仅由password
$ sed '/^password$/d' foo
password!1
password2
2password
答案2
目前还不清楚您要删除的行是否可能包含除字符串之外的任何内容password
。我假设它们确实包含,因为vidarlo 的回答已经涵盖了相反的内容。
(扩展)正则表达式
(^|\s)password(\s|$)
匹配所有以行首或空格开头,后跟中缀password
,后跟空格或行尾的字符串。
相应的sed
命令是:
sed -re '/(^|\s)password(\s|$)/d'
或者,您也可以使用grep
反向模式:
grep -vEe '(^|\s)password(\s|$)'