파일 내용 변환

파일 내용 변환

다음 파일이 있습니다.

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
--

관련 정보