PSVファイルがあります。
$ cat hello.txt
123|"xy"|11|"sb" sri"|13|"bb"
123|"xy"|11|"rss" "NIL"|13|"bb"
4番目のフィールドでは、内部二重引用符を別の文字()に置き換えたいと思いますW
。
私が試した方法は次のとおりです。しかし、所望の結果が得られなかった。
$ sed '/"|/s/[^|]|/W|/4' hello.txt
123|"xy"|11|"sb" sriW|13|"bb"
123|"xy"|11|"rss" "NILW|13|"bb"
hello.txt
出力が以下のファイルと同じであることを望みます。
$ cat hello.txt
123|"xy"|11|"sbW sri"|13|"bb"
123|"xy"|11|"rssW WNIL"|13|"bb"
ベストアンサー1
他の観点からは、
123|"xy"|11|"sb" sri"|13|"bb"
123|"xy"|11|"rss" "NIL"|13|"bb"
パイプで区切られた4番目のフィールドを抽出しようとしています。
cut -f4 -d'|' < test
"sb" sri"
"rss" "NIL"
フィールド内に引用符がある可能性があるため、外側のペアを削除してください。
cut -f4 -d'|' < test | sed -e 's/^"\(.*\)"/\1/g'
sb" sri
rss" "NIL
残りの引用符をすべてW記号に置き換えます。
cut -f4 -d'|' < test | sed -e 's/^"\(.*\)"/\1/g' | tr '"' 'W'
sbW sri
rssW WNIL
最後に、外部引用符をもう一度交換してください。
cut -f4 -d'|' < test | sed -e 's/^"\(.*\)"/\1/g' | tr '"' 'W' \
| sed -e 's/\(.*\)/"\1"/g'
"sbW sri"
"rssW WNIL"