私のファイルには、次のような長い行があります。
#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*==
- 空白以外の文字の次の順序は、==
各行の先頭の順序で処理されます。