尝试打印匹配表达式时使用 sed 的引用 \1 无效
Invalid reference \1 using sed when trying to print matching expression
在开始之前,我已经查看了 this 问题,但解决方案似乎是他们没有在正则表达式中转义括号。我遇到了同样的错误,但我没有对正则表达式进行分组。我想要做的是在 lastlog 文件中找到所有 names/usernames 和 return UNs ONLY。
我有:
s/^[a-z]+ |^[a-z]+[0-9]+//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**
如果替换命令的第一部分中没有任何捕获组,则不能使用反向引用(例如 </code>)。</p>
<p>假设您想要行中的第一个单词,您可以使用以下命令 运行:</p>
<pre><code>sed -n 's/^\s*\(\w\+\)\s\?.*//p'
解释:
-n
抑制 sed 打印它处理的每一行的默认行为
^\s*
匹配行首后跟任意数量的空格
\(\w\+\)
捕获一个或多个单词字符(字母和数字)
\s\?.*
匹配一个或零个空格,后跟任意数量的字符。这是为了确保我们匹配捕获组中的整个单词
</code> 用捕获的组替换匹配的行</li>
<li><code>p
标志打印与表达式匹配的行。结合 -n
,这意味着只打印匹配项。
希望对您有所帮助!
在开始之前,我已经查看了 this 问题,但解决方案似乎是他们没有在正则表达式中转义括号。我遇到了同样的错误,但我没有对正则表达式进行分组。我想要做的是在 lastlog 文件中找到所有 names/usernames 和 return UNs ONLY。
我有:
s/^[a-z]+ |^[a-z]+[0-9]+//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**
如果替换命令的第一部分中没有任何捕获组,则不能使用反向引用(例如 </code>)。</p>
<p>假设您想要行中的第一个单词,您可以使用以下命令 运行:</p>
<pre><code>sed -n 's/^\s*\(\w\+\)\s\?.*//p'
解释:
-n
抑制 sed 打印它处理的每一行的默认行为^\s*
匹配行首后跟任意数量的空格\(\w\+\)
捕获一个或多个单词字符(字母和数字)\s\?.*
匹配一个或零个空格,后跟任意数量的字符。这是为了确保我们匹配捕获组中的整个单词</code> 用捕获的组替换匹配的行</li> <li><code>p
标志打印与表达式匹配的行。结合-n
,这意味着只打印匹配项。
希望对您有所帮助!