在开始之前,我已经看过this问题,但似乎解决方案是他们没有在正则表达式中转出括号。我得到了同样的错误,但我没有对正则表达式进行分组。我想要做的是在lastlog文件中找到所有名称/用户名并仅返回UN。
我有什么:
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**
答案 0 :(得分:2)
如果替换命令的第一部分中没有任何捕获组,则不能使用反向引用(例如\1
)。
假设您想要该行中的第一个单词,可以运行以下命令:
sed -n 's/^\s*\(\w\+\)\s\?.*/\1/p'
说明:
-n
会抑制sed的默认行为以打印它处理的每一行^\s*
匹配行的开头,后跟任意数量的空格\(\w\+\)
捕获一个或多个单词字符(字母和数字)\s\?.*
匹配一个或零个空格,后跟任意数量的字符。这是为了确保我们匹配捕获组中的整个单词\1
将匹配的行替换为已捕获的组p
标志打印与表达式匹配的行。结合-n
,这意味着只会打印匹配。我希望这有帮助!