表示/ etc / passwd中的一行
我想从行尾($)grep到第一个":"从最后一行开始。
例如,\ n johndoe:x:39:39:John Doe:/ var / lib / canna:/ sbin / nologin
我想grep" / sbin / nologin"
我的grep命令使用的正确的正则表达式是什么?
答案 0 :(得分:1)
如果您不介意选择冒号,请使用:
grep -o -e ':[^:]*$' /etc/passwd
选择一个不跟随任何其他冒号的冒号,然后选择行尾,只打印匹配的冒号。
如果您不想要冒号并且确实启用了PCRE grep
,请查看Regex lookahead for 'not followed by' in grep
?;你需要调整它来做后视而不是前瞻,这就是全部。
如果您没有grep
-o
,请使用sed
代替(省略冒号):
sed -n -e '/.*:\([^:]*\)$/ s//\1/p' /etc/passwd
这可能是最便携的解决方案。
(在macOS Sierra和Mac OS X上,/etc/passwd
文件的顶部有注释行,以#
开头。sed
命令不会打印这些行,因为它们不会#39;它们上面有任何冒号。因此,它可以在Mac以及Linux和Unix的其他变体上干净利用。它不使用sed
的高级(又称非便携式)功能。)
答案 1 :(得分:1)
如何使用cut
,这更直接:
echo 'johndoe:x:39:39:John Doe:/var/lib/canna:/sbin/nologin' | cut -d ':' -f 7