Estou usando xlsxgrep em um pipe, mas há um aviso que vai no stdout em vez de ser ignorado. Eu quero aprender a remover essa linha no próprio tubo.
meu comando:
$ 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/"
As linhas de erro no pipe:
WARNING *** file size (36373) not 512 + multiple of sector size (512)
WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero
Tive a ideia de remover as 2 linhas com sed correspondentes em "WARNING ***" Usando o seguinte comando:
$ sed '/^WARNING \*\*\*/d' "${OUTPUTFOLDER}/xlsxgrep-output.txt"
SAÍDA:
'test.xlsx'
'test2.xlsx'
Mas quando adiciono o mesmo comando no pipe não funciona
$ awk -F: '{print "\x27"$1"\x27"}' "${OUTPUTFOLDER}/xlsxgrep-output.txt" |
awk '!x[$0]++' |
sed '/^WARNING \*\*\*/d'
SAÍDA:
'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'
RESULTADO ESPERADO:
'test.xlsx'
'test2.xlsx'
Por que meus comandos não funcionam e como fazer isso certo?
Parece estranho que esses avisos sejam impressos em stdout e não em stderr, mas não tenho experiência com essa
xlsgrep
ferramenta, então não sei se isso é esperado ou se talvez tenha uma opção que a controle.De qualquer forma, o seu
sed
está falhando porque*
é um caractere especial em expressões regulares: significa "0 ou mais repetições do caractere anterior". No seu caso, você tem o*
logo após um espaço, então*
significa "0 ou mais espaços". Não tenho certeza de como os subseqüentes*
são interpretados, o GNUsed
apresentaria um erro, mas o busyboxsed
parece tratá-lo como um único arquivo*
.De qualquer forma, a maneira correta de fazer isso é escapar de
*
:Além disso, observe que seu
awk
comando está inserindo'
caracteres no início da linha:Isso significa que
WARNING
não será mais a primeira coisa na linha:Agora você tem
'WARNING'
. Portanto, você precisa levar isso em consideração tambémsed
, combinando qualquer caractere:Ou combinando aspas simples:
Ou talvez outra coisa, dependendo de qual foi a entrada original e o que
awk
levou$1
em'{print "\x27"$1"\x27"}'
.