개행으로 분리 된 xargs


40

그것을 만들 수 있나요 xargs사용하는 경우에만 분리 기호로 줄 바꿈을? (리눅스 및 OS X의 bash에서 중요한 경우)

내가 알고 -0사용할 수 있지만 그것은하지 모든 명령이 지원 NUL로 구분 된 출력으로 피타을합니다.


당신이 성취하려고하는 것은 무엇입니까? 그것에 대해 다른 방법이있을 수 있습니다.
Dennis Williamson

@Dennis 나는 종종 grep, sed, 매우 기본적인 awk 등이있는 파이프 라인에서 주로 여러 가지 실행을 병렬화하기 위해 다양한 용도로 사용합니다. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4에 비해 입력하기에 너무 많은 방법입니다 ls *.foo | xargs -P4.
Kornel

스크립트와 함수는 타이핑을 줄이는 두 가지 훌륭한 방법입니다.
Dennis Williamson

이것은 SO 질문입니까?
Charles Stewart

답변:


17

라인을 따라 뭔가

alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command

작동해야합니다.


38
tr '\n' '\0'작동합니다.
Kornel

2
펄은 하나의 캐릭터에 대한 과잉입니다. trCPU와 손가락 모두 더 빠릅니다.
Hello World

52

GNU xargs (Linux의 기본값, findutilsOS X의 MacPorts에서 설치 )는 입력에 대한 -d사용자 지정 구분 기호지정할 수 있도록 지원합니다.

ls *foo | xargs -d '\n' -P4 foo 

나는 alias xxargs="xargs -d '\n'"내 bashrc에 있습니다. 따라서 다음과 같은 작업을 수행 할 수 있습니다.grep -IRl foo | xxargs sed -i s/foo/bar/g
tylerl

4
이것은 정말로 받아 들여지는 대답이어야합니다. 펄을 깰 필요가 없습니다. tr좋은 생각 이지만 .
Ehtesh Choudhury

3
brew install findutils그리고 gxargs나는, OS X에 감사를 필요 정확히이었다.
Brad Koch

5

Bash를 사용하면 일반적으로 읽는 동안 루프에 찬성하여 조금 까다로운 것에 대해 xargs를 피하는 것이 좋습니다. 귀하의 질문에 while read -ar LINE; do ...; done대해서는 작업을 수행하십시오 (예를 들어, ${LINE[@]}전체 행에 대해 LINE과 함께 배열 구문을 사용해야 함 ). 이것은 속임수가 필요하지 않습니다. 기본적으로 read는 \n줄 종결 자 문자로 사용됩니다.

xargs의 장점과 단점에 대한 질문을하는 동안 while-read loops ... 완료!


2
이것은 xargs -n1 -d'\n'전체를 모방 할 수는 없고 모방 할 수도 있습니다 xargs.
Hello World

@HelloWorld-인수를 쉽게 묶을 수 있으므로 xargs -n$N약간의 추가 스크립트만으로도 시뮬레이션 할 수 있습니다 .
찰스 스튜어트

그렇습니다, 나는 upvoters 중 하나입니다, 그것은 언급 할 가치가있는 발언 일뿐입니다.
Hello World

이것이 바로 내가하는 일입니다! 또한 read별도의 변수에서 더 많은 단어를 읽거나로 구분 기호를 변경 하는 등의 옵션을 사용할 수 있습니다 IFS=' '.
caesarsol

0

표준 버전이 아닙니다. 해킹 된 버전이 find ... -print0 | xargs -0 ...있습니다. ' ' 에 대해 알기 전에 사용했습니다 . 사본을 원하시면 저에게 연락하십시오-내 프로필을 참조하십시오. (로켓 과학은 없다-그것은 거의 직무를 수행한다. 그것은 완전한 xargs 복제본이 아니다.)


0

cat file | xargs | sed 's/ /\n/ig'표준 Linux bash 도구를 사용하여 공백을 줄 바꿈으로 변환하는 것은 어떻습니까?


file공백과 줄 바꿈 이 포함 된 경우이 명령의 결과로 구분할 수 없습니다.이 질문은 요청과 반대 방향으로 진행됩니다.
Max Nanasy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.