regex - bash sed/grep 提取两个词之间的文本

标签 regex linux bash sed

我的问题和这里一样,除了我只想要第一次出现,忽略所有其他的:

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/

相关文章:

java - 正则表达式匹配器 - 未找到匹配项

linux - `kill "$! "` 在 FOR 循环时不起作用

linux - fish 主题 "bobthefish"不显示特殊符号

bash - 如何在 awk 中用 "."替换重复的行?

bash - 遍历文件中的行并扩展全局变量

python - 从字符串的开头到结尾匹配字符串

regex - 正则表达式在括号中查找数字,但仅在字符串的开头

c - 使用正则表达式在两个字符串之间匹配多个字符串

c++ - 如何监控 FIFO 的读取和写入?

linux - 在 Linux 上自动启动 gdb