Preciso descobrir se alguma linha de um arquivo começa com **
.
Não consigo descobrir como fazê-lo porque *
é interpretado como um curinga pelo shell.
grep -i "^2" test.out
funciona se a linha começa com um 2, mas
grep -i "^**" test.out
obviamente não funciona.
(Também preciso saber se essa linha termina com um, )
mas ainda não o fiz).
text-processing
grep
quoting
Shar Hunter
fonte
fonte
*
não precisa escapar nesse caso específico, fwiw.grep "^\\*\\*"
para que o grep receba a^\*\*
sequência necessária para evitar a interpretação dos asteriscos como quantificadores de regex.Como você deseja verificar a linha que começa
**
e termina com)
, você pode combinar duasgrep
operações como esta,Ou com um único
grep
comando como este,Explicação
^\*\*
: linha de partida que começa com**
.*
: combinar tudo depois**
\)$
: linha de partida que também tem)
no final da linha.fonte
Não é a concha
Nenhuma das respostas até agora abordou o problema real. Seria útil explicar por que não funciona como o esperado.
grep -i "^**" test.out
Porque você citou o padrão para grep , não
*
é expandido pelo shell. É passado para grep como está. Isso é explicado na página de manual [1] do bash [2] :É expressões regulares regulares regulares
Uma expressão regular é um padrão que descreve um conjunto de cadeias.
*
é um dos principais padrões nas expressões regulares. Por padrão, o grep interpreta da seguinte maneira:Isso significa que seu padrão, tal como está,
^**
não faz muito sentido. Possivelmente, ele tenta coincidir com o início da linha zero ou mais vezes , duas vezes. O que quer que isso signifique.A solução é citá- lo:
grep -i "^\*\*" test.out
[1] Eu não recomendo a leitura. Por favor, use
man dash
ou similar.[2] Nenhum shell foi dado, então eu assumo o bash .
fonte
Outras opções.
Você pode usar
sed
ouawk
tambémConhecer linhas que terminam com o
)
uso tambémgrep
oused
ouawk
fonte
'/^*\*/&&/)$/'
...Esta é a versão completamente sem aspas:
grep ^\\*\\* test.out
. Para passar uma barra invertida literal do shell para o grep, ele precisa ser escapado.Isso funciona desde que você não tenha arquivos no diretório que iniciem
^\
e contenham outra barra invertida.fonte