使用AWK或SED在两个字符串之间提取数据

时间:2013-05-29 12:54:08

标签: sed awk

我正在尝试从某个标记中包含它们的文件中提取数据/网址(在本例中为 someurl ),即

xyz>someurl>xyz

我不介意使用awksed

3 个答案:

答案 0 :(得分:7)

我认为最好,最简单的方法是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的块并打印第二个。

答案 1 :(得分:0)

grep诞生于提取事物:

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

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

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

答案 2 :(得分:0)

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

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

这只是一个让你开始而不是最终答案的样本。