Estou tentando usar a opção regex estendida no grep para filtrar os arquivos, linhas com o seguinte formato de string no início da linha.
any-non-space-char: *
Eu supus que o seguinte comando iria fazer o truque; no entanto, apenas imprimiu todas as linhas dos 2 arquivos que foram capturados pelo caractere curinga.
~/tmp > cat * | grep -v -E "^\S+:.{6}\*"
hi
test1 blah, blah, blah: * blah, blah, blah"
test: * blah, blah, blah: * blah, blah, blah
sd
hi
temp: * blah, blah, blah: * blah, blah, blah"
temp2: blah, blah, blah: * blah, blah, blah
sd
~/tmp >
BTW, eu alias o grep para 'grep --color=auto'
, então o comando destaca as strings correspondentes conforme o regex corretamente, que são test: *
na linha 3 e temp: *
na linha 6 na saída acima. No entanto, essas linhas correspondentes são impressas na tela, o que eu não esperava.
O conteúdo dos dois arquivos:
~/tmp > ls -l
total 8
-rw-rw-r-- 1 pmn ccusers 116 Dec 11 09:22 1
-rw-rw-r-- 1 pmn ccusers 116 Dec 11 09:23 2
~/tmp >
~/tmp > cat 1
hi
test1 blah, blah, blah: * blah, blah, blah"
test: * blah, blah, blah: * blah, blah, blah
sd
~/tmp >
~/tmp > cat 2
hi
temp: * blah, blah, blah: * blah, blah, blah"
temp2: blah, blah, blah: * blah, blah, blah
sd
~/tmp >
BTW, o seguinte é semelhante ao que espero:
~/tmp > cat * | grep -v -E ":.{6}*"
hi
sd
hi
sd
~/tmp >
Que removeu as linhas
test1 blah, blah, blah: * blah, blah, blah"
test: * blah, blah, blah: * blah, blah, blah
temp: * blah, blah, blah: * blah, blah, blah"
temp2: blah, blah, blah: * blah, blah, blah
(também removeu as linhas 1 e 4 acima, o que não é o que eu quero - portanto, este comando grep não funciona para mim).
Eu sei como fazer isso funcionar no PERL; no entanto, por certas razões, posso usar apenas grep, awk ou sed.
Como faço para que isso funcione?
@PsychoData
Obrigado pela sua resposta. Temo que o comando não tenha feito o truque. Seu comando retornou o seguinte
~/tmp > cat * | grep -v -E "^[^\S]+:.{6}\*"
hi
sd
hi
sd
~/tmp >
que é o mesmo que o resultado retornado por grep -v -E ":.{6}*"
na minha pergunta, que, no entanto, não é o que eu queria. Eu queria um comando para trazer a seguinte saída:
hi
test1 blah, blah, blah: * blah, blah, blah"
sd
hi
temp2: blah, blah, blah: * blah, blah, blah
sd
IMHO, o seu removeu as linhas a seguir porque ^[^\S]+:
faz uma correspondência ambiciosa, correspondendo o máximo possível à linha - que, como você pode ver, é até a mais direita ' *
' nas linhas a seguir.
test1 blah, blah, blah: * blah, blah, blah"
test: * blah, blah, blah: * blah, blah, blah
temp: * blah, blah, blah: * blah, blah, blah"
temp2: blah, blah, blah: * blah, blah, blah
BTW, observe que há exatamente 6 espaços entre cada par :
e *
. Acho que a formatação dificulta isso.