3

このようなxmlファイルから複数の「ディレクター」を抽出し、それらをパイプで区切って連結するbashスクリプト、つまりTom Tykwer | Andy Wachowskiを作成しようとしています。

関連する xml セクションは次のとおりです。

<directors>
<item>Tom Tykwer</item>
<item>Andy Wachowski</item>
</directors>

bash スクリプトで xmlstarlet を使用して、次のコマンドを実行します。

DIRECTORS=$(xmlstarlet sel -t -v "imdbdocument/directors/item" mymoviexml)
echo $DIRECTORS

ください

Tom Tykwer Andy Wachowski

そしてこのコマンドを端末で直接

xmlstarlet sel -t -v "imdbdocument/directors/item" mymovieapi.xml

私に与えます:

(empty line)
Tom Tykwer
Andy Wachowski

-n オプションを指定していないのに、なぜ新しい行が追加されるのかわかりません。

私の検索のいくつかは、次のようなものを示唆しています:

xmlstarlet sel -t -m "imdbdocument/directors" -v "item" -o "|" mymovieapi.xml 

しかし、これは私に与えます:

Tom Tykwer
Andy Wachowski|

私が得ることができる助けをいただければ幸いです。Debian Wheezy の xmlstarlet 1.3.1 と Xubuntu 13.10 の xmlstarlet 1.5.0 でこの動作が見られます。

4

2 に答える 2

1

あなたが試すことができます

xmlstarlet sel -t -v "imdbdocument/directors/item" mymovieapi.xml |  awk '1' ORS='|'

出力あり

|Tom Tykwer|Andy Wachowski|

または、先頭と末尾のパイプが必要ない場合|:

xmlstarlet sel -t -v "imdbdocument/directors/item" mymovieapi.xml | awk 'NF>0 {if (i++) printf "|"; printf "%s", $0 } END { printf "\n" }'

与える

Tom Tykwer|Andy Wachowski
于 2014-01-01T12:21:04.410 に答える