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

使用AWK或SED在两个字符串之间提取数据,sed,awk,Sed,Awk,我试图从某个标签ie中包含数据/URL的文件中提取数据/URL(在本例中为-someurl) xyz>someurl>xyz 我不介意使用awk或sed我认为最好、最简单的方法是使用cut: $ echo "xyz>someurl>xyz" | cut -d'>' -f2 someurl 使用awk可以执行以下操作: $ echo "xyz>someurl>xyz" | awk 'BEGIN { FS = ">" } ; { print $2

我试图从某个标签ie中包含数据/URL的文件中提取数据/URL(在本例中为-someurl

xyz>someurl>xyz

我不介意使用
awk
sed
我认为最好、最简单的方法是使用
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块,我认为最好、最简单的方法是
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

我们得到了
something1grep生来就是用来提取东西的:

kent$  echo "xyz>someurl>xyz"|grep -Po '>\K[^>]*(?=>)'
someurl
当然,你可以用炸弹杀死一只苍蝇:

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

格雷普生来就是为了提取东西:

kent$  echo "xyz>someurl>xyz"|grep -Po '>\K[^>]*(?=>)'
someurl
当然,你可以用炸弹杀死一只苍蝇:

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

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

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

这只是一个开始的示例,不是最终答案

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

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

这只是一个开始的示例,不是最终答案

嗨,肯特,如果你不介意的话,你能解释一下“>\K[^>]*(?=>)”我假设[^>]表示开始,(?=>)表示结束;剩下的是什么?谢谢
[^>]
表示任何字符而不是
(?=>)
是向前看的。匹配字符后跟
>
awk不是炸弹,这正是它的目的。嗨,肯特,如果你不介意的话,你能解释一下“>\K[^>]*(?=>)”我假设[^>]表示开始,(?=>)表示结束;剩下的是什么?谢谢
[^>]
表示任何字符而不是
(?=>)
是向前看的。匹配字符后跟
awk不是炸弹,这正是它的目的。可能与:,尽管示例很难看。可能与:,尽管示例很难看