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