텍스트를 처리할 때 두 줄마다 줄바꿈을 제거해야 합니다.
예시 텍스트:
this is line one
and this is line two
the third and the
fourth must be pasted too
원하는 출력:
this is line one and this is line two
the third and the fourth must be pasted too
루프 를 시도했지만 while
while 루프는 나쁜 습관입니다. tr
이를 수행하기 위해 다른 명령을 사용할 수 있습니까 ?
답변1
paste
(예를 들어 표준 POSIX 단순 유틸리티이기도 함 tr
)이 도구입니다.
이 개행 문자를 공백 대신 공백으로 바꾸고 싶다고 가정해 보겠습니다.삭제됨샘플에 표시된 대로:
paste -d ' ' - - < file
또는:
paste -sd ' \n' file
정말로 제거하고 싶다면 ' '
로 교체하세요.'\0'
3개 중 2개를 교체하려면:
paste -sd ' \n' file
3개 중 1개(두 번째부터 시작):
paste -sd '\n \n' file
등.
또 다른 이점 paste
은 종료되지 않은 회선이 남지 않는다는 것입니다. 예를 들어 삭제하면모든파일에 개행 문자( tr -d '\n' < file
또는 와 동일 tr '\n' ' ' < file
)가 있으면 행이 개행 문자로 끝나야 하므로 전혀 줄이 없게 됩니다. 따라서 일반적 으로 유효한 텍스트에 필요한 후행 줄 바꿈을 추가하는 paste
(예: paste -sd '\0' file
또는 )을 사용하는 것이 더 좋습니다 .paste -sd ' ' file
답변2
현대적이다GNU sed
sed -rz 's/\n([^\n]*\n)/ \1/g' sample.text
그리고앗
awk '{getline line2;print $0, line2}' sample.text
답변3
sed
이를 위해 다음과 같이 사용하십시오.
SHW@SHW:/tmp $ cat a
this is line one
and this is line two
the third and the
fourth must be pasted too
SHW@SHW:/tmp $ sed 'N;s/\n/ /' a -i
SHW@SHW:/tmp $ cat a
this is line one and this is line two
the third and the fourth must be pasted too
답변4
또 다른 방법은 다음을 사용하는 것입니다 xargs
.
$ < txt xargs -d '\n' -n 2 echo
this is line one and this is line two
the third and the fourth must be pasted too
어디
$ cat txt
this is line one
and this is line two
the third and the
fourth must be pasted too
하지만 이 솔루션은 각 라인이 프로세스를 실행하기 때문에 다소 과잉입니다 echo
. 따라서 장난감 예제와는 별도로 awk/sed 또는 유사한 기반 솔루션이 선호되어야 합니다.