파이프라인에서 xlsxgrep을 사용하고 있지만 무시되는 대신 stdout에 경고가 나타납니다. 파이프 자체에서 해당 라인을 제거하는 방법을 배우고 싶습니다.
내 명령:
$ xlsxgrep -riH "${SEARCHTERM}" "${DIR}" >> "${OUTPUTFOLDER}/xlsxgrep-output.txt"
$ awk -F: '{print "\x27"$1"\x27"}' "${OUTPUTFOLDER}/xlsxgrep-output.txt" |
awk '!x[$0]++' |
tee "${OUTPUTFOLDER}/xlsxgrep-output-filename.txt" |
xargs -I {} cp --backup=t {} "${OUTPUTFOLDER}/xlsxgrep-output/"
파이프라인의 오류 라인:
WARNING *** file size (36373) not 512 + multiple of sector size (512)
WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero
다음을 사용하여 sed에서 "WARNING ***"과 일치하는 두 줄을 제거하는 것을 고려해야 했습니다.
$ sed '/^WARNING \*\*\*/d' "${OUTPUTFOLDER}/xlsxgrep-output.txt"
산출:
'test.xlsx'
'test2.xlsx'
하지만 파이프라인에 동일한 명령을 추가하면 작동하지 않습니다.
$ awk -F: '{print "\x27"$1"\x27"}' "${OUTPUTFOLDER}/xlsxgrep-output.txt" |
awk '!x[$0]++' |
sed '/^WARNING \*\*\*/d'
산출:
'test.xlsx'
'WARNING *** file size (36373) not 512 + multiple of sector size (512)'
'WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero'
'test2.xlsx'
예상 출력:
'test.xlsx'
'test2.xlsx'
내 명령이 올바른 방식으로 작동하지 않는 이유는 무엇입니까?
답변1
이러한 경고가 stderr 대신 stdout에 인쇄되는 것이 이상해 보이지만 이 도구에 대한 경험이 없으므로 xlsgrep
이것이 예상되는지 또는 이를 제어할 수 있는 옵션이 있는지는 알 수 없습니다.
어쨌든, 귀하의 sed
실패는 *
정규식의 특수 문자로 인해 발생합니다. 이는 "이전 문자가 0회 이상 반복됨"을 의미합니다. 귀하의 경우에는 *
그 뒤에 공백이 있으므로 *
"0개 이상의 공백"을 의미합니다. 후속 설명이 무엇인지 잘 모르겠습니다 *
. GNU에서는 sed
오류가 발생하지만 busybox는 sed
이를 단일 *
.
어쨌든 올바른 방법은 탈출하는 것입니다 *
.
sed '/^WARNING \*\*\*/d'
또한 awk
명령이 '
줄 시작 부분에 문자를 삽입한다는 점에 유의하세요.
awk -F: '{print "\x27"$1"\x27"}'
이는 이것이 WARNING
더 이상 첫 번째 일이 아니라는 것을 의미합니다.
$ echo WARNING | awk -F: '{print "\x27"$1"\x27"}'
'WARNING'
이제 문자를 일치시켜 이를 고려해야 'WARNING'
합니다 .sed
sed '/^.WARNING \*\*\*/d'
또는 작은따옴표를 일치시켜:
sed "/^'WARNING \*\*\*/d"
awk
또는 원래 입력 내용과 내용에 따라 다른 것일 수도 있습니다 .$1
'{print "\x27"$1"\x27"}'