我究竟做错了什么 ? sed:-e表达式#1,字符74:缺少命令

时间:2018-09-16 00:36:13

标签: regex sed

我正在运行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 :(得分:0)

您错过了一个命令。尝试在末尾添加强制字符p:

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

如果以某种编程语言使用正则表达式,通常需要编写模式并通过库中的其他方法使用它。模式需要的sed或awk之类的工具还提供有关您要使用此模式做什么的信息。外汇:

  • / p打印传递的字符串
  • / s替换字符串

答案 1 :(得分:-1)

您忘了转义一些应按字面意义输入的字符。正则表达式将方括号视为字符类而不是文字字符,并且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

Here是我使用的正则表达式的链接