Что я делаю неправильно ?sed: -e выражение # 1, символ 74: отсутствует команда - PullRequest
0 голосов
/ 16 сентября 2018

Я использую Ubuntu 14 и пытаюсь использовать sed, чтобы найти определенную строку в файле.

Когда я запускаю команду

sed '/password\s[success=\d\sdefault=ignore]\spam_unix.so\sobscure\s+sha512/' testfile.txt

Я получаю sed: -e expression #1, char 74: missing command

Я ищу строку:

password    [success=1 default=ignore]  pam_unix.so obscure sha512

Что я пропускаю или делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы забываете избегать некоторых символов, которые следует понимать буквально.Regex рассматривает скобки как класс символов вместо буквенных символов, и точка в pam_unix.so также должна быть экранирована.Это регулярное выражение, предназначенное для строки:

password(\s+)\[success=\d\sdefault=ignore\](\s+)pam_unix\.so\sobscure(\s+)sha512

Если вы введете ее в команду, она будет выглядеть следующим образом:

sed '/password(\s+)\[success=\d\sdefault=ignore\](\s+)pam_unix\.so\sobscure(\s+)sha512/' testfile.txt

Здесь является ссылкойк регулярному выражению я использовал

0 голосов
/ 16 сентября 2018

Вы пропустите команду. Попробуйте добавить в конце символ jus p:

sed /password\s[success=\d\sdefault=ignore]\spam_unix.so\sobscure\s+sha512/p' testfile.txt

Если вы используете регулярное выражение в каком-то языке программирования, обычно вам нужно написать шаблон и использовать его другим методом из библиотеки. Такие инструменты, как sed или awk, ожидаемые с шаблоном, также информация о том, что вы хотите сделать с этим шаблоном. Fx:

  • / p печать пропущенных строк
  • / s заменить строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...