Удалите строки со словом с помощью sed

Я пытался использовать sed '/\bpassword\b/d' и sed "/\<password\>/d" для нахождения только строк, которые содержат "пароль" и удаляют их, но он не работает команда также находит слова как "пароль!" или "password@".

Скажем, у меня есть эти слова:

password
password1
password2
password!
password@
password%
password*

Я только должен удалить строку с "паролем" и не другими. В настоящее время те две команды удаляют "password@", "% пароля", "пароль!" и "пароль*" также.

0
задан 10 November 2017 в 01:37

2 ответа

Если они появляются на одной строке на слово, используйте ^, и $ для соответствия запускаются строки и конца строки. Рассмотрите следующий файл примера foo:

$ cat foo
password
password!1
password2
2password

Используя sed соответствие началу и концу строки заменяет только строку, состоящую из только password

$ sed '/^password$/d' foo
password!1
password2
2password
5
ответ дан 1 November 2019 в 06:11

В настоящее время неясно, могут ли строки, которые Вы хотите удалить, содержать что-нибудь кроме строки password. Я должен предположить, что они делают, потому что ответ vidarlo уже касается противоположного.

(Расширенное) регулярное выражение

(^|\s)password(\s|$)

соответствия все строки, которые запускаются в начале или с пространства белых, сопровождаемого инфиксом password, сопровождаемый или пробелом или концом строки.

Соответствующее sed команда:

sed -re '/(^|\s)password(\s|$)/d'

Кроме того, можно использовать grep в обратном режиме:

grep -vEe '(^|\s)password(\s|$)'
2
ответ дан 1 November 2019 в 06:11

Другие вопросы по тегам:

Похожие вопросы: