ファイルの1行にある文字の検索と置換

ファイルの1行にある文字の検索と置換

私のLinuxコンピュータにファイルがあります。

1234 | 456 |"abc | xyz"|  fid|

|その間にあるwhichをカンマに変更したいと思います。" "abcとxyzの間にはパイプのみがあります。この行は同様の行を含むファイルの一部ですが、「」の中には1つしかありません。誰でも助けることができますか?

答え1

echo '1234 | 456 |"abc | xyz"| fid|' | \
sed 's/\([^|]*|[^|]*|[^|]*\)|/\1,/'

これを作ります。

1234 | 456 |"abc , xyz"| fid|

このsedラインは、パイプ以外のもの、パイプ、パイプ以外のもの、パイプ、パイプ以外のものを見つける方法で動作します。これ逆参照から除外された関心パイプです。すべてを逆参照に変更し、最後のパイプをコンマに置き換えます。残りの行は変更されません。

答え2

私はterdonの問題に対する答えと説明を次のようにしています。


echo '1234 | 456 |"abc | xyz"|  fid|' | sed "s:|:,:3"

答え3

|各行間の引用符を置き換えようとすると、次のように動作します。

sed 's/"\([^"]*\)|\([^"]*\)"/"\1,\2"/' yourfile

関連情報