2

SAXを使用してXMLファイルを解析し、それらをパイプで区切られた値に再現するカスタムメイドのツールがあります。行の例は次のとおりです。

name|lastname|address|telephone|age|other info|other info

各行を書き直したいのですが、bashスクリプトを使用してこれを行いますが、いくつか問題があります。基本的に、引用符で囲まれた各単語を設定したいと思います。上記の行の例は次のとおりです。

"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"

私はsedを使用してこれを実行しようとしていますが、このsed行で部分的に成功しています

sed 's:|:"|":g'

出力を取得すると:name "|" lastname "|" address "|" telephone "|" age "|" other info "|" other info

しかし、最初の文字と最後の文字の引用符を設定する方法がわかりません。アドバイスはありますか?

4

3 に答える 3

4

あなたは間違いなく正しい軌道に乗っていました。行頭、行末の特殊なケースをカバーする方法は次のとおりです。

 sed 's:|:"|":g;s/^/"/;s/$/"/'

^char アンカーは行頭まで$検索し、char アンカーは行末まで検索します。

IHTH

于 2012-09-19T12:06:22.783 に答える
3
line='name|lastname|address|telephone|age|other info|other info'

echo $line| sed -e 's/|/"|"/g' -e 's/^/"/' -e 's/$/"/'

与えます:

"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"
于 2012-09-19T12:09:45.013 に答える
2

を使用した片道GNU awk

awk 'BEGIN { FS=OFS="|"; Q="\"" } { for (i=1; i<=NF; i++) $i = Q $i Q }1'

結果:

"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"
于 2012-09-19T12:17:51.217 に答える