要求:仅grep / cut / join / regex。
我有这样的数据:
798 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
15386 /usr/bin/nautilus --gapplication-service
16051 /usr/bin/zeitgeist-daemon
我想从数字中提取行数据到第二个结尾空间,例如
798 /usr/bin/dbus-daemon
仅使用带有或不带有正则表达式的grep / cut / join。
我尝试过
grep -oe "[^ ][^ ]* *[a-zA-Z\]*$"
但结果与预期不符。
答案 0 :(得分:1)
您可以使用
# With GNU grep:
grep -oP '^\s*\K\S+\s+\S+' <<< "$s"
# With a POSIX ERE pattern:
grep -oE '[0-9][^ ]* +[^ ]+' <<< "$s"
请参见online demo
o
-匹配输出模式(非行)P
-使用PCRE正则表达式引擎来解析模式PCRE模式的详细信息:
^
-行首\s*
-超过0个空格\K
-匹配重置运算符会丢弃到目前为止匹配的整个文本\S+
-1个以上非空格字符\s+\S+
-1 +空格和1 +非空格字符。POSIX ERE模式匹配
[0-9]
-一个数字[^ ]*
-空格以外的0+个字符 +
-1个或更多空格[^ ]+
-空格以外的1个以上字符。