使用 sed 删除带有单词的行

使用 sed 删除带有单词的行

我尝试使用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|$)'

相关内容