2017-05-22 1 views
1

sed文字列の一致後の次の2つのオカレンスを置き換えるオプションを見つけることができません。基本的には、これらのCSVファイルでは、jobcdの後の最初の2つの即時パイプ|文字を1フィールドにする必要があるため、置き換えようとしています。パイプ文字の次の2つの発生を置換するためにsedを使用

私は、これはすべての単一|文字を置き換え実現する前に...ここでsed -i 's/|/%/g' data.csv

は、これらのCSVファイルからのサンプル行ですが、これを実行することができた:

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

私が取得しようとしています

-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL% Cnt:60%||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

編集:代わり%の、私はと交換しようとしているその行が見えるようにので、私はのように見えるように出力を取得しようとしている:

あなたが使用することができます
-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 

答えて

0

s='-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL| Cnt:60|||1900-01-01 00:00:00|0|||0||||0|0|0|.000' 

sed -E 's/(\|jobcd)([^|]*)\|([^|]*)\|/\1\2\\|\3\\|/g' <<< "$s" 
-1|7149636|2015-02-14 00:42:23|20150214|4223||Delete Future Batch||jobcd: %PAL\| Cnt:60\|||1900-01-01 00:00:00|0|||0||||0|0|0|.000 
+0

おかげで、私はちょうど私が\ 'の置換文字列を使用する必要があることに気づい|代わりに'の ' % '。私は 'sed -i -E /(\ | jobcd)([^ |] *)\ |([^ |] *)\ |/\ 1 \ 2 \ | \ 3 \ |/g"を試しましたが、それはうまくいきませんでした。適切な構文は何でしょうか? – simplycoding

+0

あなたは 'sed -E '/(\ | jobcd)([^ |] *)\ |([^ |] *)\ |/\ 1 \ 2 \\ | \ 3を使って\を二重にエスケープする必要があります\\ |/g '<<< "$ s" ' – anubhava

+0

これはうまくいったのですか? – anubhava

関連する問題