繁体   English   中英

AWK-从行尾打印直到找到字符串

[英]AWK--Print From End of Line till string is found

使用awk或sed,如何找到从行尾直到字符串的第一个实例的打印。 举例来说,如果flow是字符串,然后flow.com将不会发生任何解析www.stackoverflow.com同样地,对于www.flow.stackoverflow.com

sed是用于单行简单替换的出色工具:

sed 's/.*\(flow\)/\1/' file

如果适合您,请尝试以下行:

awk -F'flow' 'NF>1{print FS$NF}' file

替代单线:

awk 'sub(/.*flow/,"flow")' file

测试(我在EOL中添加了一些数字,以便我们知道输出来自何处):

kent$  cat f
www.stackoverflow.com1
and similarly for 2 
www.flow.stackoverflow.com3

kent$  awk -F'flow' 'NF>1{print FS$NF}' f
flow.com1
flow.com3

kent$  awk 'sub(/.*flow/,"flow")' f
flow.com1
flow.com3

请注意,如果字符串(对于正则表达式)具有某些特殊含义,例如*, |, [ ... ,则可能需要转义这些字符。

GNU grep可以做到:

grep -oP 'flow(?!.*flow).*' <<END
www.stackoverflow.com
nothing here
www.flow.stackoverflow.com
END
flow.com
flow.com

该正则表达式查找“​​流”,向前看时找不到“流”,然后查找该行的其余部分。

这也将起作用:更简单的正则表达式,但更多的努力:

rev filename | grep -oP '^.*?wolf' | rev

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM