마지막 10 줄을 원한다면 :
tail myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
그러나 GNU xargs
에서는 다음을 사용하여 구분 기호를 줄 바꿈으로 설정할 수도 있습니다.
tail myFile.txt | xargs -ri -d '\n' myCmd {} arg1 arg2
(의 -0
줄임말 -d '\0'
).
포터블하게도 모든 캐릭터를 간단히 탈출 할 수 있습니다 :
tail myFile.txt | sed 's/./\\&/g' | xargs -I{} myCmd {} arg1 arg2
또는 각 줄을 인용하십시오.
tail myFile.txt | sed 's/"/"\\""/g;s/.*/"&"/' | xargs -I{} myCmd {} arg1 arg2
NUL로 구분 된 마지막 10 개의 레코드 myFile.txt
(텍스트 파일이 아님)를 원한다면를 호출 \n
하기 \0
전에 로 변환해야 합니다. tail
즉, 파일을 완전히 읽어야합니다.
tr '\n\0' '\0\n' < myFile.txt |
tail |
tr '\n\0' '\0\n' |
xargs -r0i myCmd {} arg1 arg2
편집 (당신이 변경 이후 tail
에 tail -f
귀하의 질문에) :
위의 마지막 것은 분명히 이해가되지 않습니다 tail -f
.
xargs -d '\n'
하나는 작동하지만 다른 사람을 위해, 당신은 버퍼링 문제가있는 것입니다. 에서:
tail -f myFile.txt | tr '\n' '\0' | xargs -r0i myCmd {} arg1 arg2
tr
터미널 (여기서는 파이프)로 가지 않을 때 출력을 버퍼링합니다. IE는 쓰기 위해 데이터가 가득 찬 버퍼 (8kiB와 같은 것)를 누적 할 때까지 아무것도 쓰지 않습니다. myCmd
배치로 호출 되는 수단 입니다.
GNU 또는 FreeBSD 시스템에서 다음 명령 을 tr
사용하여 버퍼링 동작을 변경할 수 있습니다 stdbuf
.
tail -f myFile.txt | stdbuf -o0 tr '\n' '\0' |
xargs -r0i myCmd {} arg1 arg2