다음 파일이 있습니다.
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
--