0

我被 awk 困住了

我有一个具有以下结构的文件

<package author=".." label=".." url="..">
<package author=".." label=".." url="..">
...
<package author=".." label=".." url="..">

作为输出,我想获取只有url的列表

如何用 awk 做到这一点。

我认为它应该是这样的

awk '/url="(.*)"/{print $0}' 123

但是它不起作用。

谢谢你。

4

5 回答 5

2

如果您想获得url价值,grep可以成为您的朋友:

$ cat a
<package author=".." label=".." url="thisis an url">
<package author=".." label=".." url="hello">
$ grep -Po '(?<=url=\")[^"]+' a
thisis an url
hello

这将显示从url="(不包括)直到找到双引号"的所有内容。

于 2013-10-07T09:23:27.470 回答
2

使用 GNU awk:

awk '{print gensub(/.*url="([^"]+).*/,"\\1","")}' file
于 2013-10-07T12:19:39.717 回答
0

您的awk命令仅过滤包含给定模式 ( url=...) 的行;由于您的所有行都包含字符串,因此它将为您提供所有行。为了提取信息,您可以执行诸如沿双引号拆分第 4 列之类的操作,例如:

awk '/url="(.*)"/{split($4, A, "\""); print A[2]}'

使用sed可能要容易得多:

sed -e 's|^.*url="\([^"]*\)".*$|\1|g'
于 2013-10-07T09:22:59.640 回答
0

其他awk

cat file
<package author=".." label=".." url="https://www.cisco.com">
<package author=".." label=".." url="http://www.google.com/search">

awk -F\" '/url/ {print $2}' RS=" " file
https://www.cisco.com
http://www.google.com/search
于 2013-10-08T11:39:24.217 回答
0
perl -lne 'print $1 if(/url=\"([^\"]*)\"/)' your_file
于 2013-10-08T12:13:21.427 回答