パターンを一致させ、パターンの一部だけを置き換える方法は?

パターンを一致させ、パターンの一部だけを置き換える方法は?

私のファイルには、次のような長い行があります。

#cat file
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...

カンマ文字を新しい行に置き換えたいので、出力は次のようになります。

 5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042
 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|
 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
 5FaJmwwoBABC0-frsf9xucw==|...

具体的には、カンマは「5」文字の前に来ます。 「5」文字の前には常にスペースがあることに注意してください。

以下を使用してカンマを簡単に変更できます。

#cat file | sed -e $'s/,/\\\n/g'

しかし、カンマが時々次のように他の厄介な場所にある可能性があるため、それだけでは不十分です。

#cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==...

私はsedを使用することを好むが、他の解決策も素晴らしいです。 4時間インターネットを検索しましたが、正確な問題に対する解決策が見つかりませんでした。

ベストアンサー1

sed方法:

cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...

sed 's/, \(\S*==\)/\n\1/g' file

出力:

5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...

\S*==- 空白以外の文字の次の順序は、==各行の先頭の順序で処理されます。

おすすめ記事