[英]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.