我的问题和它在这里一样,除了我只想要第一次出现,忽略所有其余部分:
How to use sed/grep to extract text between two words?
在他的例子中,如果是:
input: "Here is a String Here is a String"
但我只关心第一个“是”
echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
输出:“是一个字符串这是一个”
grep可以实现这一点吗?我也可以使用sed来完成这项工作。
由于
答案 0 :(得分:1)
您的正则表达式恰好与“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
答案 1 :(得分:0)
要获得第一个单词,您可以使用grep -o '^[^ ]*'
:
echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)' | grep -o '^[^ ]*'
你可以多次将grep传递给grep,将简单的命令组合成复杂的命令。
答案 2 :(得分:0)
sed 's/ String.*//;s/.*Here //'