Я пытался использовать sed '/\bpassword\b/d'
и sed "/\<password\>/d"
для нахождения только строк, которые содержат "пароль" и удаляют их, но он не работает команда также находит слова как "пароль!" или "password@".
Скажем, у меня есть эти слова:
password
password1
password2
password!
password@
password%
password*
Я только должен удалить строку с "паролем" и не другими. В настоящее время те две команды удаляют "password@", "% пароля", "пароль!" и "пароль*" также.
Если они появляются на одной строке на слово, используйте ^, и $ для соответствия запускаются строки и конца строки. Рассмотрите следующий файл примера foo
:
$ cat foo
password
password!1
password2
2password
Используя sed соответствие началу и концу строки заменяет только строку, состоящую из только password
$ sed '/^password$/d' foo
password!1
password2
2password
В настоящее время неясно, могут ли строки, которые Вы хотите удалить, содержать что-нибудь кроме строки password
. Я должен предположить, что они делают, потому что ответ vidarlo уже касается противоположного.
(Расширенное) регулярное выражение
(^|\s)password(\s|$)
соответствия все строки, которые запускаются в начале или с пространства белых, сопровождаемого инфиксом password
, сопровождаемый или пробелом или концом строки.
Соответствующее sed
команда:
sed -re '/(^|\s)password(\s|$)/d'
Кроме того, можно использовать grep
в обратном режиме:
grep -vEe '(^|\s)password(\s|$)'