echo "hi,my,name,is" | sed 's/,/\n/g' >out.txt
생산하다:
hi
my
name
is
그러나 반대로:
sed 's/\n/,/g' out.txt
생산하다:
hi
my
name
is
sed
교체 작업을 취소하여 작업을 복원하는 것은 어떨까요 ?
답변1
노력하다:
$ sed 'H;1h;$!d;x; s/\n/,/g' out.txt
hi,my,name,is
기본적으로 sed는 한 번에 한 줄씩 읽고, 처리하고, 인쇄합니다. 단일 행에는 개행 문자가 없으므로 이 명령은 s/\n/,/g
아무 작업도 수행하지 않습니다. 위에서 언급했듯이 해결책은 전체 파일을 한 번에 읽은 다음 를 실행하는 것입니다 s/\n/,/g
.
이 명령은 H;1h;$!d;x
전체 파일을 한 번에 읽습니다. 아마도 이것을 관용구로 생각하는 것이 가장 쉬울 것입니다. 정말 자세한 내용을 알고 싶다면:
H
-공간을 예약하기 위해 현재 줄을 추가합니다.1h
- 첫 번째 행인 경우 예약된 공간을 덮어씁니다.$!d
- 마지막 라인이 아닌 경우 패턴 공간을 제거하고 다음 라인으로 점프합니다.x
- 홀드 공간과 패턴 공간을 교환하여 전체 파일을 패턴 공간에 넣습니다.
대안: 앗
$ awk 'NR>1{printf ","} {printf "%s",$0} END{print""}' out.txt
hi,my,name,is
또는:
$ awk '{printf "%s%s",(NR==1?"":","),$0} END{print""}' out.txt
hi,my,name,is
답변2
GNU sed 사용
echo "hi,my,name,is" | sed 's/,/\n/g' | sed -z 's/\n/,/g'