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
perl -lne 'print $1 if(/url=\"([^\"]*)\"/)' your_file
于 2013-10-08T12:13:21.427 に答える