편집 명령을 통해 Tail 출력을 Xargs로 파이프할 때 일관되지 않은 동작

편집 명령을 통해 Tail 출력을 Xargs로 파이프할 때 일관되지 않은 동작

나는 포기하고 SE 정신에게 도움을 요청했습니다. 이에 대해서는 아래에서 더 자세히 설명하겠지만 불일치를 이 세 줄로 압축했습니다. 작은따옴표(대괄호 안) 사이의 문자열을 grep하고 xargs 명령과 함께 사용하려고 합니다.

A) 이것은 작동합니다:

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \'

B) 이것은 작동합니다:

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | xargs -t -n1 -d '\n' echo

C) 다음은 수행되지 않습니다.

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \' | xargs -t -n1 -d'\n' echo

한 번만 빼고 바로 Ctrl-C를 누르면 무작위로 작동합니다. 이것은 작동한다는 것을 말해줍니다. 단지 뭔가에 매달려 있는 것뿐입니다. 올바른 출력은 다음과 같습니다.

echo check 
check

D) 이 방법도 작동하므로 Tail에 문제가 있는 것으로 추론할 수 있지만 문제가 Tail에만 발생한다는 의미이므로 문제 해결에는 도움이 되지 않습니다.

echo "Utterance: ['check']" | grep --line-buffered -Po "\'(.*?)\'" |  tr -d \' | xargs -t -n1 -d '\n' echo

..그러나 왜 B의 Tail에서는 작동하지만 Tr과 Xargs가 결합된 경우에는 작동하지 않습니다. 대신 시도한 여러 다른 문자열 추출 명령에서 동일한 중단 문제(또는 응답 없음)를 확인했습니다.

cut -d\' -f2
awk -F '"' '{print $2}' (on double quotes)
sed -n " s,[^']*'\([^']*\).*,\1,p "
sed 's/.*\' \(.*\)\'/\1/' (doesnt work escaping single quotes)

나는 (다소) 여기서 입력에 특별히 초점을 맞춘 Xargs를 이해합니다.xargs가 tail -f와 함께 작동하지 않는 이유는 무엇입니까?). 그러나 이 답변은 Tail이 완료되지 않았기 때문이라고 말합니다 . 이는 캡처된 모든 텍스트를 한 번에 가져와서 사용 하고 한 줄씩 grep --line-buffered분해한다고 말합니다 ( 여전히 분해되는 Tail을 사용하는 것과는 대조적) . 공간 등). -n1-d '\n'-L 1

참고로, -t 플래그는 장황한 설명(t=talk?)을 위한 것이며 -p는 대화식 확인을 제공합니다.

EDIT1: 또 다른 이상한 것을 게시하려고 했는데 Tee를 사용하여 무슨 일이 일어나고 있는지 확인하려고 할 때 "에코"가 발생합니까? 그러나 적어도 @steeldriver의 의견은 유효합니다.

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \' | tee >/dev/tty | xargs -t -n1 -d '\n' echo
echo 

관련 정보