이런 목록이 있습니다.
blue-image1.jpg,
blue-image2.jpg,
blue-image3.jpg
red-image1.jpg,
red-image2.jpg,
red-image3.jpg
원래는 csv 형식이었지만 먼저 접두사가 필요했기 때문에 줄 바꿈을 추가했습니다. 이제 다시 조립해야 하므로 여기에 있습니다.
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
나는 노력 cat list.txt | tr ',\n' ','
했고cat list.txt | sed 's/,\n/,/g'
그러나 어느 것도 제대로 작동하지 않는 것 같습니다.
답변1
그것은 간단합니다:
$ sed -z 's/,\n/,/g' infile
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
이 -z
스위치는 입력 레코드 구분 기호를 로 설정하여 NUL
문제를 방지합니다 \n
. 바라보다 man sed
:
-z, --null-data
NUL 문자로 줄을 구분합니다.
답변2
다음 답변은 에 대한 단일 호출보다 기술적으로 CPU 효율성이 낮다는 점을 인정 sed
하지만 다른 답변보다 기억하고, 쓰고, 읽고, 이해하고, 수정하는 것이 더 쉽기 때문에 혼합에 추가합니다.
cat list.txt | tr ',\n' '#@' | sed 's/#@/,/g;s/@/\n/g'
답변3
이는 본질적으로 동일합니다.39. 줄이 백슬래시 "\"로 끝나면 다음 줄에 추가합니다.페트리스 크루민스의Sed 한 줄 설명, 1부: 파일 간격, 번호 매기기, 텍스트 변환 및 교체그러나 연속 문자로 백슬래시 대신 쉼표를 사용하십시오.
sed -e :a -e '/,$/N; s/,\n/,/; ta' list.txt
blue-image1.jpg,blue-image2.jpg,blue-image3.jpg
red-image1.jpg,red-image2.jpg,red-image3.jpg
답변4
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' yourfile