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

时间:2014-03-17 19:57:14

标签: linux sed awk

使用awk或sed,如何从一行的末尾打印,直到找到一个字符串(第一个实例)。例如,如果flow是字符串,则flow.com将从www.stackoverflow.com进行解析,类似于www.flow.stackoverflow.com

3 个答案:

答案 0 :(得分:2)

sed是单行简单替换的绝佳工具:

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

GNU grep可以做到:

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

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

这也可行:更简单的正则表达式,但更多努力:

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