我被困在了awk
我有一个具有以下结构的文件
<package author=".." label=".." url="..">
<package author=".." label=".." url="..">
...
<package author=".." label=".." url="..">
作为输出我想获得仅网址的列表
如何使用awk。
我认为它应该像
awk '/url="(.*)"/{print $0}' 123
但它不起作用。
谢谢。
答案 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