【问题标题】:extract text between two strings bash sed excluding提取两个字符串之间的文本 bash sed 不包括
【发布时间】:2014-03-27 05:42:31
【问题描述】:

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

假设文件是​​,

....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

但它不输出任何东西。

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

【问题讨论】:

  • 我不确定,但您是否尝试删除括号前的反斜杠?

标签: bash sed


【解决方案1】:
$ 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

【讨论】:

  • 但输出中出现了“Dean/Winchester”前后的空行
  • @BrendenCarvalho 我不明白您还想删除空白行。我会更新的。
  • @BrendenCarvalho 已修复。立即尝试。
【解决方案2】:
$ sed -n -e '/^Your name is:/,/^You are male/{ /^Your name is:/d; /^You are male/d; p; }' test 

Dean/Winchester

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 2015-06-04
    • 2020-10-15
    • 1970-01-01
    • 2021-05-13
    • 2012-07-07
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多