提取两个字符串之间的文本bash sed排除

时间:2014-03-27 05:42:32

标签: bash sed

我试图在两个字符串之间提取一些文本(在文件中只出现一次)。

假设文件是​​,

....Some Data    
Your name is:

Dean/Winchester

You are male. Some data .....

我想在'你的名字之间提取文字:'并且'你是男性。'两者都是独一无二的,只发生一次。 所以,输出应该是,

Dean/Winchester

我尝试使用sed,

sed -n 's/Your name is:\(.*\)You are male./\1/' abcd

但它没有输出任何东西。

任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:3)

$ sed -n '0,/Your name is/ d; /You are male/,$ d; /^$/d; p' abcd
Dean/Winchester

对于多样性,这是一个awk解决方案:

$ awk '/Your name is/ {p=1; next} /You are male/ {exit} /^$/ {next} p==1 {print}' abcd 
Dean/Winchester

答案 1 :(得分:3)

$ sed -n -e '/^Your name is:/,/^You are male/{ /^Your name is:/d; /^You are male/d; p; }' test 

Dean/Winchester