멋진 파일이 있습니다. 각 줄은 개행 문자로 끝나고 첫 번째 줄 다음의 각 줄은 쉼표로 시작됩니다. 이와 같이:
blah blah blah
,more blah blah blah
,even more blah blah blah
쉼표와 개행 문자를 바꾸고 싶습니다.
blah blah blah,
more blah blah blah,
even more blah blah blah
길이가 몇천줄 밖에 안되어서 VI에서 하려고 했습니다. 다양한 조합을 시도했지만 아무것도 작동하지 않습니다. 아마 거의 그럴 것 같은데요?
%s//\n,/,/\n/g
하지만 후행 문자에 대한 오류가 발생합니다. 구분 기호와 이스케이프 문자를 엉망으로 만든 것은 확실하지만 무엇이 잘못되었는지는 알 수 없습니다.
편집: \r이 아니라 \n으로 끝나는 것으로 가정합니다. :set list를 수행하면 각 줄은 $로 끝납니다.
답변1
나는 GNU를 사용하여 이것을 생각해 냈습니다 sed
.
sed -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file
또는 파일에서 바꾸십시오.
sed -i -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file
0회 이상 나타나는 줄의 시작,
^[,]*
거기에서 줄 끝까지 패턴을 캡처합니다.
(.*)$
캡처된 패턴으로 바꾸고 ,
끝에 추가합니다.
\1,
,
라스 라인을 삭제합니다 :
-e '$s/,$//'
답변2
쉼표와 개행 문자를 바꾸고 싶습니다
이것은 실제로 Perl을 사용하면 가능합니다:
perl -0 -pe 's/\n,/,\n/g' file.txt
답변3
GNU가 있는 경우 파일이 메모리에 맞으면 / 옵션을 sed
사용할 수 있습니다 -z
.--null-data
sed -z 's/\n,/,\n/g' file
답변4
sed 사용 - N
... P;D
루프를 사용하여 2줄 버퍼를 유지합니다.
$ sed -e '$!N;s/\n,/,\n/' -e 'P;D' file
blah blah blah,
more blah blah blah,
even more blah blah blah