Bash - 在(多个)令牌之间提取字符串

时间:2015-07-16 08:54:58

标签: regex bash awk sed

我试图在stackoverflow上找到这个问题的答案,但是更加困惑......

我需要从2个令牌中提取一个字符串,如下所示:

    <key>UUID</key>
    <string>5432542-gfd5432g-543254g-432g53</string>

我需要的是<string></string>之间的数字 - 字母 - 连字符字符串。问题是这些令牌在文件中出现了数千次 - 因此我认为我必须包括<key>UUID</key>

我认为答案将包括sedawk和正则表达式,如果可能的话 - 我会喜欢关于建议内容的简短解释。

提前多多感谢。

1 个答案:

答案 0 :(得分:0)

如果它始终跟在<key>UUID</key>之后,您可以使用grep

grep '<key>UUID</key>' -A 1 file | tail -n 1 | sed -e 's:<string>::' -e 's:</string>::'

1)包含<key>UUID</key>的grep行,以及(-A 1)字符串后面的一行 2)tail:从输出中只取最后一行 3)sed:无任何替换<string></string>(多个模式的-e)