リストを生成するには、sedに新しい行を追加します。バックスラッシュエスケープが機能しません。

リストを生成するには、sedに新しい行を追加します。バックスラッシュエスケープが機能しません。

それぞれの名前の後に新しい行を追加したいと思います。私のファイルには以下が含まれます。

Smoker, M., Schauser, L., Yoshioka, H.,

私が望むもの:

Smoker, M
Schauser, L
Yoshioka, H

だから私はsedでいくつかのオプションを使いました。

sed 's%\., %\n%g'
sed 's%\., %\r%g'
sed -E 's%\., %\r\n%g'

似ていますが、常に改行文字の代わりにrorを取得します。n

喫煙者、MNサウス、L.N吉岡、H。N
         ↑↑↑

私はMac OS sedを使用しています。

答え1

"sed" が s/// の RHS で "\n" をサポートしていない場合は、次のことを試すことができます。

sed -e '/\.,/!d' -e 'G;s/\.,[ ]*\(.*\(.\)\)$/\2\1/' -e 'P;D' < yourfile

TABがないと仮定すると、入力データは図のようになります。改行文字を提供するために、「G」を介してパターン空間に注入されたデフォルトの「sed」を使用し、必要に応じて匿名で改行文字を移動して必要な結果を得ることができます。

答え2

これはBSD sedとbashを使って動作するようです。

sed $'s/\., */\\\n/g'

リテラルポイント、カンマ、スペースのすべてのシーケンスを改行文字に置き換える必要があります。

$'\n'改行構文をサポートするシェルがない場合は、次のことを試すことができます。

sed 's/\., */\
/g'

つまり、バックスラッシュまですべての内容を入力してクリックし、[Enter 完了]をクリックします/g'。または、シェルの入力モードの設定方法に応じて、+のCtrlVCtrl+を入力すると、Jコマンドを評価せずに改行文字を挿入できます。

答え3

あなたは間違いなくそれを望ん\nでいません\r

しかし、

sed 's%\., %\n%g'

私には効果がありますが、なぜあなたが苦労しているのかわかりません。

デュアルバックスラッシュを使用すると、問題が解決する可能性があります。または、代わりにcontrol-v control-m(画面に表示されている\n)を試してください。^M

関連情報