如何在unix中的两个单词之间提取文本?

cra*_*rog 14 unix sed pattern-matching


正在
使用
基本
SED
表达: -

sed -n "am/,/sed/p" 
Run Code Online (Sandbox Code Playgroud)

获取"am"和"sed"之间的文本,它将输出"am \n using \n basic \n sed".但我真正的问题是如果字符串是: -


正在
使用
基本的
grep
表达式.

我在这句话中应用了上面的sed然后它给了"我用\n基本\n grep \n表达式",它不应该给它.如果没有匹配,如何丢弃输出?

有什么建议?

bmk*_*bmk 13

问题中的命令(sed -n "/am/,/sed/p"注意添加的斜杠)表示:

  • 找到包含该字符串的am
  • 和打印(p),直到含有线sed发生

因此它打印:

I am using basic grep expression
Run Code Online (Sandbox Code Playgroud)

因为它包含am.如果你要添加更多的线条,它们也将被打印,直到出现包含线条为止sed.

例如:

echo -e 'I am using basic grep expression.\nOne more line\nOne with sed\nOne without' | sed -n "/am/,/sed/p"
Run Code Online (Sandbox Code Playgroud)

结果是:

I am using basic grep expression.
One more line
One with sed
Run Code Online (Sandbox Code Playgroud)

我想 - 你想做的是这样的:

sed -n "s/.*\(am.*sed\).*/\1/p"
Run Code Online (Sandbox Code Playgroud)

例:

echo 'I am using basic grep expression.' | sed -n "s/.*\(am.*sed\).*/\1/p"

echo 'I am using basic sed expression.' | sed -n "s/.*\(am.*sed\).*/\1/p"
sed -n "s/.*\(am.*sed\).*/\1/p"
Run Code Online (Sandbox Code Playgroud)