명령을 실행하면 cat file | grep pattern
여러 줄의 출력이 표시됩니다. 어떻게 효과적으로 각을 대체 한 줄에 모든 라인을 연결 않습니다 "\n"
와 "\" "
(최종 "
공백)?
cat file | grep pattern | xargs sed s/\n/ /g
나를 위해 작동하지 않습니다.
명령을 실행하면 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"
echo ""
프롬프트 텍스트하기 전에 새로운 라인을 추가하는 말.
"
표시 one" two" three"
되지만과 같이 표시되기를 원합니다 one" two" three
. 마지막 세 개에는 괄호가 없습니다. 어떤 아이디어?
sed '$s/..$//'
마지막 줄에서 마지막 두 문자를 삭제하기 위해 결과를 파이프 수 있습니다.
--delete
기본값에 두 개의 인수 가 필요하므로 옵션 을 사용해야합니다 . 예 tr --delete '\n'
.
파이핑 출력 xargs
은 각 출력 라인을 공백이있는 단일 라인으로 연결합니다.
grep pattern file | xargs
또는 모든 명령 (예 : ls | xargs
. xargs
출력 의 기본 제한 은 ~ 4096 자이지만 예를 들어 늘릴 수 있습니다. xargs -s 8192
.
| tr '\n' ' '
php exec
함수를 통해 호출 할 때 나를 위해 작동하지 않았습니다 . tr을 무시하고 grep에서 마지막으로 일치시킵니다. | xargs
일했다.
echo
따옴표없이 bash에서 캐리지 리턴, 탭 및 여러 공백을 제거하십시오.
echo $(cat file)
IFS="$(printf '\n\t')"
echo $(<file)
에코를 사용하는 것이을 사용하는 것보다 더 깔끔 할 tr '\n' ' '
뿐만 아니라 \r\n
줄 끝을 생각하는 것이 좋습니다 . @aggsol 당신은 그냥 말할 수 있습니다IFS=$'\n\t'
줄 바꾸기 문자 \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
) 에 대해 문자를 바꿉니다 .
아마도 가장 좋은 방법은 출력을 한 줄로 생성하는 'awk'도구를 사용하는 것입니다.
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
공백 구분 기호가있는 모든 줄을 하나로 병합합니다.
{print}
기본 동작 인 awk 이후 에는 필요하지 않습니다 .
빨간 모자 리눅스에서는 echo :
에코 $ (고양이 / some / file / name)
이것은 한 줄에 파일의 모든 레코드를 제공합니다.
sed
배쉬는 (이후에 관여하지 않도록하는 단일 따옴표로 스크립트를sed s/\n/ /g
호출sed
두 개의 인수, 즉와s/n/
와/g
); (2)의 출력을 원하기 때문에cat file | grep pattern
할 수 입력 에sed
아닌 인수 로sed
는 제거 할 필요가xargs
; (3) 파일 이름을 두 번째 인수로 사용할 수cat
있으므로 여기에 필요하지 않습니다grep
. 따라서 시도해야합니다grep pattern file | sed 's/\n/ /g'
. (이 경우 위의 링크에서 주어진 이유로 인해 작동하지 않았지만 이제는 미래를 알고 있습니다.)