
このようなテキスト形式を含むテキストファイルがあります。
012345,"[ThinkPadT2/3Gband,Mac]",Lenovo,"iPhone3G,A1241"
sedを使用してパイプ(|)演算子を介して二重引用符内の単語内のコンマのみを置き換える方法。次の出力が必要です。
012345,"[ThinkPadT2/3Gband | Mac]",Lenovo,"iPhone3G|A1241"
答え1
これは標準製作手順です。sed
欲はないそして逆参照括弧内の部分文字列のヒント()
sed 's/\(\"[^",]\{1,\}\),\([^",]\{1,\}\"\)/\1 | \2/g'
またはGNUの場合sed
sed -r 's/("[^",]+),([^",]+")/\1 | \2/g'
答え2
次のように試すことができます。
$ cat filename
012345,"[ThinkPadT2/3Gband,Mac]",Lenovo,"iPhone3G,A1241"
$ cat filename | sed -E 's:([A-Z,a-z]),([A-Z,a-z]):\1|\2:g'
012345,"[ThinkPadT2/3Gband|Mac]",Lenovo,"iPhone3G|A1241"
答え3
Sedはこの目的に適したツールではありません。上記の機能を実装するには、いくつかの高度な機能が必要な場合があると思います。これは、二重引用符内の複数の二重カンマを置き換えるPerlオンラインプログラムです<space>|<space>
。
$ echo '012345,"[ThinkPadT2/3Gband,Mac,Apple]",Lenovo,"iPhone3G,A1241"' | perl -pe 's/,(?!(?:"[^"]*"|[^"])*$)/ | /g'
012345,"[ThinkPadT2/3Gband | Mac | Apple]",Lenovo,"iPhone3G | A1241"