ファイル内容の変換

ファイル内容の変換

次のファイルがあります。

Dj Assad;Laurell
Sweat
--
Steve Aoki;BTS
Waste it on me
--
Oliver Heldens;Shungudzo
Fire in my soul
--

私はそれを次のように変換したいと思います。

Dj-Assad-Laurell-Sweat
--
Steve-Aoki-BTS-Waste-it-on-me
--
Oliver-Heldens-Shungudzo-Fire-in-my-soul
--

私は試した:

sed -e 's/;/ /g; s/ /-/g' file.txt

ただし、改行文字は削除されません。

答え1

この試み:

$ <file.txt tr '\n' '\0' | sed 's/\x0--\x0/\n--\n/g' | tr '\0; ' '-'
Dj-Assad-Laurell-Sweat
--
Steve-Aoki-BTS-Waste-it-on-me
--
Oliver-Heldens-Shungudzo-Fire-in-my-soul
--
  • <file.txt tr '\n' '\0'すべての\n(改行文字)を\0(NULL)文字に変換
  • | sed 's/\x0--\x0/\n--\n/g'\0--\0に変換\n--\n
  • | tr '\0; ' '-'残りのNULL、セミコロン、および空白文字を次に変換します。-

答え2

また試すことができます

tr '\n' '-' <file | sed -e 's/[ ;]\+/-/g' -e 's/----/\n--\n/g'

最初に改行文字を置き換えて-から、sedはスペースとセミコロンを削除し、-最後に行を--再作成します。

答え3

これはどうですか?

sed -i -e 'N;N;s/\(;[a-zA-Z]*\)\n/\1-/g; s/[ ;]/-/g' foo

編集:セミコロン変換が追加されました。

答え4

Awkのいくつかのオプション:

awk 'BEGIN{RS="\n--\n"; ORS=RS; FS="[ ;]|\n"; OFS="-"} {NF+=0} 1' file.txt
Dj-Assad-Laurell-Sweat
--
Steve-Aoki-BTS-Waste-it-on-me
--
Oliver-Heldens-Shungudzo-Fire-in-my-soul
--

または(GNU Awk固有):

$ gawk 'BEGIN{RS="\n--\n"; ORS=RS; FPAT="[[:alnum:]]+"; OFS="-"} {NF+=0} 1' file.txt
Dj-Assad-Laurell-Sweat
--
Steve-Aoki-BTS-Waste-it-on-me
--
Oliver-Heldens-Shungudzo-Fire-in-my-soul
--

関連情報