我正在尝试使用正则表达式(sed)剪切(替换)字符串,但希望匹配第一次出现。在结果中,您可以看到它在第三个数据处停止。
文本:
Cool Text Cool Text DATA : first text DATA : second text DATA : third text
正则表达式:
sed 's/.*DATA//'
结果:
: third text
答案 0 :(得分:5)
使用sed,您可以使用占位符的技巧:
sed 's/DATA/###/;s/.*###//;'
使用gnu grep,您可以在perl模式下使用lookbehind:
grep -Po '(?<=DATA).*'
答案 1 :(得分:1)
如果你可以切换到perl,你可以使用非贪婪的量词:
echo "$string" | perl -pe 's/.*?DATA//'
# .............................^
那将停在第一个 DATA
答案 2 :(得分:0)
sed 's/DATA\(.*\)/&#\1/;s/.*DATA\(.*\)#\1/\1/' YourFile
Sed总是尝试采用最大的模式,所以在你的问题中,它需要所有直到最后一个DATA(最大可能)。我只是通过保持最大的反向构造。