[linux] 여러 줄의 출력을 한 줄로 연결하는 방법은 무엇입니까?

명령을 실행하면 cat file | grep pattern여러 줄의 출력이 표시됩니다. 어떻게 효과적으로 각을 대체 한 줄에 모든 라인을 연결 않습니다 "\n""\" "(최종 "공백)?

cat file | grep pattern | xargs sed s/\n/ /g
나를 위해 작동하지 않습니다.



답변

tr '\n' ' '모든 개행 문자를 공백으로 변환하는 데 사용하십시오 .

$ grep pattern file | tr '\n' ' '

참고 : grep파일을 읽고cat 연결합니다. 하지마 cat file | grep!

편집하다:

tr단일 문자 번역 만 처리 할 수 ​​있습니다. 다음 awk과 같이 출력 레코드 구분 기호를 변경하는 데 사용할 수 있습니다 .

$ grep pattern file | awk '{print}' ORS='" '

이것은 다음과 같이 변형됩니다.

one
two
three

에:

one" two" three" 


답변

파이핑 출력 xargs은 각 출력 라인을 공백이있는 단일 라인으로 연결합니다.

grep pattern file | xargs

또는 모든 명령 (예 : ls | xargs. xargs출력 의 기본 제한 은 ~ 4096 자이지만 예를 들어 늘릴 수 있습니다. xargs -s 8192.


답변

echo따옴표없이 bash에서 캐리지 리턴, 탭 및 여러 공백을 제거하십시오.

echo $(cat file)


답변

이것은 당신이 원하는 것일 수 있습니다

cat file | grep pattern | paste -sd' '

편집 내용에 대해 이것이 무엇을 의미하는지 잘 모르겠습니다.

cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'

( ~에서 발생하지 않는 것으로 가정 file)


답변

쉼표로 구분하여 출력을 생성하는 예입니다. 필요한 구분 기호로 쉼표를 바꿀 수 있습니다.

cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD

생산 :

1,2,3,4,5


답변

다음은 ex편집기를 사용하는 방법 입니다 ( Vim의 일부 ).

  • J 모든 라인 OIN P의 표준 출력 RINT :

    $ ex +%j +%p -scq! file
  • J (파일의) 모든 라인에서 적절한 OIN :

    $ ex +%j -scwq file

    참고 : 파일 자체의 모든 줄을 연결합니다!


답변

이 문제를 해결하는 가장 빠르고 쉬운 방법은 다음과 같습니다.

줄 바꾸기 문자 \n 를 공백 으로 바꾸 려면 :

xargs < file

xargs행당 문자 수와 모든 문자 수를 제한하는 자체 제한이 있지만이를 늘릴 수 있습니다. 이 명령을 실행하면 자세한 내용을 확인할 수 있습니다 xargs --show-limits.man xargs

한 문자를 다른 문자바꾸고 싶을 때 :

tr '\n' ' ' < file

한 문자를 여러 문자바꾸고 싶을 때 :

tr '\n' '~' < file | sed s/~/many_characters/g

먼저 \n물결표 의 줄 바꿈 문자 를 바꾸 ~거나 텍스트에없는 다른 고유 한 문자를 선택한 다음 물결표 문자를 다른 문자 ( many_characters)로 바꾸고 각 물결표 (flag g) 에 대해 문자를 바꿉니다 .