我的问题和这里一样,除了我只想要第一次出现,忽略所有其他的:
How to use sed/grep to extract text between two words?
在他的例子中,如果是:
input: "Here is a String Here is a String"
但我只关心第一个"is"
echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
输出:“是一个字符串这里是一个”
这甚至可以用 grep 实现吗?我也可以使用 sed 来完成这项工作。
谢谢
最佳答案
您的正则表达式恰好匹配位于“Here”和“String”之间的最长字符串。也就是说,确实是“这里是一个字符串这里是一个字符串”。这是 *
量词的默认行为。
$ echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
is a String Here is a
如果你想匹配最短的,你可以在*
量词后面放一个?
(贪婪修饰符):
$ echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*?(?= String)'
is a
is a
关于regex - bash sed/grep 提取两个词之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368934/