awk匹配文件中的模式

时间:2013-10-07 09:12:31

标签: awk pattern-matching

我被困在了awk

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

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

作为输出我想获得仅网址的列表

如何使用awk。

我认为它应该像

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

但它不起作用。

谢谢。

5 个答案:

答案 0 :(得分: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="(未包含)中包含的所有内容,直到找到双引号"

答案 1 :(得分:2)

使用GNU awk:

awk '{print gensub(/.*url="([^"]+).*/,"\\1","")}' file

答案 2 :(得分:0)

您的awk命令仅过滤包含给定模式的行(url=...);因为你的所有行都包含字符串,它会给你所有的行。 为了提取信息,你可以做一些事情,比如在双引号中拆分第4列,例如:

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

使用sed可能更容易:

sed -e 's|^.*url="\([^"]*\)".*$|\1|g'

答案 3 :(得分: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

答案 4 :(得分:0)

perl -lne 'print $1 if(/url=\"([^\"]*)\"/)' your_file