尝试打印匹配表达式时使用sed的引用\1无效

尝试打印匹配表达式时使用sed的引用\1无效,sed,backreference,Sed,Backreference,在我开始之前,我已经研究了这个问题,但似乎解决方案是它们并没有逃过正则表达式中的括号。我得到了同样的错误,但我没有分组正则表达式。我要做的是在lastlog文件中查找所有名称/用户名,并仅返回UNs 我所拥有的: s/^[a-z]+ |^[a-z]+[0-9]+/\1/p 我已经看到许多解决方案展示了如何在awk中实现这一点,这对于将来的参考是非常好的,但我想使用sed实现这一点 编辑例如输入: dzhu pts/15 n0000d174.cs.ut

在我开始之前,我已经研究了这个问题,但似乎解决方案是它们并没有逃过正则表达式中的括号。我得到了同样的错误,但我没有分组正则表达式。我要做的是在lastlog文件中查找所有名称/用户名,并仅返回UNs

我所拥有的:

    s/^[a-z]+ |^[a-z]+[0-9]+/\1/p
我已经看到许多解决方案展示了如何在awk中实现这一点,这对于将来的参考是非常好的,但我想使用sed实现这一点

编辑例如输入:

    dzhu             pts/15   n0000d174.cs.uts Wed Feb 17 08:31:22 -0600 2016
    krobbins                                   **Never logged in**
    js24                                       **Never logged in**

如果替换命令的第一部分中没有任何捕获组,则不能使用反向引用(例如
\1

假设您需要行中的第一个单词,可以运行以下命令:

sed -n 's/^\s*\(\w\+\)\s\?.*/\1/p'
说明:

  • -n
    抑制sed打印其处理的每一行的默认行为
  • ^\s*
    匹配行的开头,后跟任意数量的空格
  • \(\w\+\)
    捕获一个或多个单词字符(字母和数字)
  • \s\?.*
    匹配一个或零个空格,后跟任意数量的字符。这是为了确保我们匹配捕获组中的整个单词
  • \1
    用捕获的组替换匹配的行
  • p
    标志打印与表达式匹配的行。结合
    -n
    ,这意味着只打印匹配项

我希望这有帮助

如果替换命令的第一部分中没有任何捕获组,则不能使用反向引用(例如
\1

假设您需要行中的第一个单词,可以运行以下命令:

sed -n 's/^\s*\(\w\+\)\s\?.*/\1/p'
说明:

  • -n
    抑制sed打印其处理的每一行的默认行为
  • ^\s*
    匹配行的开头,后跟任意数量的空格
  • \(\w\+\)
    捕获一个或多个单词字符(字母和数字)
  • \s\?.*
    匹配一个或零个空格,后跟任意数量的字符。这是为了确保我们匹配捕获组中的整个单词
  • \1
    用捕获的组替换匹配的行
  • p
    标志打印与表达式匹配的行。结合
    -n
    ,这意味着只打印匹配项

我希望这有帮助

您认为
\1
的作用是什么?我建议您看看。包括小样本输入和预期输出将有助于我们澄清您的想法。祝你好运。你认为
\1
有什么用?我建议你看看。包括小样本输入和预期输出将帮助我们澄清你的想法。祝你好运。你能用格式化的版本编辑你的帖子吗?我不知道注释中的换行符应该放在哪里,我也不想假设.Edited。我希望这就是你想要的。你能用格式化的版本来编辑你的帖子吗?我不知道注释中的换行符应该放在哪里,我也不想假设.Edited。我希望这就是你要找的。