SED 是否正在尝试快速解决 moi(反向引用问题)?

SED 是否正在尝试快速解决 moi(反向引用问题)?

我正试图拉出来第三该行的子表达式:

#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"

(是的,adduser.conf对于那些好奇的人来说,该文件):

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)/\3/' adduser.conf

虽然这确实有效并产生了

#dialout cdrom floppy audio video plugdev users

#(我在表达式中省略了符号,所以请忽略),这个

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)//3' adduser.conf

不会并保留文件原样。

我确实意识到最后一个示例应该删除后向引用号 3,但是当我使用/sd/3(“将第三个子表达式替换为sd”)修改命令时,它也没有真正执行任何操作。

我尝试使用 options-all 运行命令-n //p以获得相同的结果。

sed我在 Debian Jessie 机器上使用 GNU版本 4.2.2。

我是否错过了我的核心公用事业“教育”的某些关键部分,或者我是否已经有一段时间没有晒太阳了?

答案1

/n 旗帜到替代命令ssed没有任何关系反向引用 \n

  • 例如,您可以将(当前行上)s/regex/string/3的第三个匹配项替换为。regexstring
  • 使用s/regex/\3/,您可以将 的第一个匹配项替换regex为第三个捕获组。
  • 使用s/regex/\3/3,您可以将 的第三个匹配项替换regex为第三个捕获组。

在这种情况下,我可能会选择更简单的东西,比如

sed 's/^.*EXTRA_GROUPS="\([^"]*\)".*$/\1/'

如果您不使用字符串,则捕获字符串的位是没有用的。

相关内容