[英]bash: awk print with in print
我需要 grep 一些模式,而且我需要在其中打印一些输出。 目前我正在使用下面的命令,它工作正常。 但我喜欢消除使用多个管道并希望使用单个 awk 命令来实现相同的输出。 有没有办法使用awk来做到这一点?
root@Server1 # cat file
Jenny:Mon,Tue,Wed:Morning
David:Thu,Fri,Sat:Evening
root@Server1 # awk '/Jenny/ {print $0}' file | awk -F ":" '{ print $2 }' | awk -F "," '{ print $1 }'
Mon
我想使用单个 awk 命令获取此输出。 有什么帮助吗?
尝试这个
awk -F'[:,]+' '/Jenny/{print $2}' file.txt
[ ]
使用多个-F
值+
表示一个或多个,因为它被视为正则表达式。您可以尝试以下操作:
awk -F: '/Jenny/ {split($2,a,","); print a[1]}' file
对于这个特殊的工作,我发现grep
稍微更健壮。 除非您的公司有不雇用名为 Eve 的人的政策。 (不明白的可以试一试。)
grep -oP '^[^:]*Jenny[^:]*:\K[^,:]+' file
或者做一个全字匹配:
grep -oP '^[^:]*\bJenny\b[^:]*:\K[^,:]+' file
或者当您确信“Jenny”是全名时:
grep -oP '^Jenny:\K[^,:]+' file
输出:
Mon
解释:
\\K
的东西不言自明:它选择具有所需名称的行。[^,:]+
捕获星期几(在本例中为Mon
)。\\K
切断Mon
之前的所有内容。-o
切断Mon
之后的任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.