【问题标题】:Extract data between two strings using either AWK or SED使用 AWK 或 SED 提取两个字符串之间的数据
【发布时间】:2013-05-29 12:54:08
【问题描述】:

我正在尝试从包含某个标签的文件中提取数据/url(在本例中为 someurl)。

xyz>someurl>xyz

我不介意使用awksed

【问题讨论】:

标签: sed awk


【解决方案1】:

我认为最好、最简单的方法是使用cut

$ echo "xyz>someurl>xyz" | cut -d'>' -f2
someurl

使用awk 可以这样做:

$ echo "xyz>someurl>xyz" | awk  'BEGIN { FS = ">" } ; { print $2 }'
someurl

sed 则有点棘手:

$ echo "xyz>someurl>xyz" | sed 's/\(.*\)>\(.*\)>\(.*\)/\2/g'
someurl

我们得到 something1<something2<something3 块并打印第二个。

【讨论】:

    【解决方案2】:

    grep 为提取东西而生:

    kent$  echo "xyz>someurl>xyz"|grep -Po '>\K[^>]*(?=>)'
    someurl
    

    你当然可以用炸弹杀死一只苍蝇:

    kent$  echo "xyz>someurl>xyz"|awk -F\> '$0=$2'
    someurl
    

    【讨论】:

    • 嗨 Kent,如果你不介意,你能解释一下 '>\K[^>]*(?=>)' 我假设 [^>] 表示开始和 (? =>) 作为结尾;剩下的是什么?谢谢
    • [^>] 表示任何字符而不是 >(?=>) 是前瞻。匹配 char 后跟 >
    • awk 不是炸弹,这正是它的用途。
    【解决方案3】:

    如果您的grep 支持P 选项,那么您可以使用lookahead 和lookbehind 正则表达式来识别url

    $ echo "xyz>someurl>xyz" | grep -oP '(?<=xyz>).*(?=>xyz)'
    someurl
    

    这只是一个让您入门的示例,而不是最终答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多