Para procurar \\"
em qualquer lugar em uma linha:
grep -F '\\"'
Ou seja, use -F
para uma pesquisa de cadeia fixa em oposição a uma correspondência de expressão regular (em que a barra invertida é especial). E use aspas strongs ( '...'
) dentro do qual a barra invertida não é especial.
Sem -F
, você precisaria dobrar as barras invertidas:
grep '\\\"'
Ou use:
grep '\\{3\}"'
grep -E '\{3}"'
grep -E '[\]{3}"'
Dentro de aspas duplas, você precisaria de outro nível de barras invertidas e também escaparia da "
com barra invertida:
# 1
# 1234567890123
grep "\\\\\\\""
barra invertida é outro operador de cotação shell. Assim, você também pode citar as barras invertidas e "
caracteres com barra invertida:
\g\r\e\p \\\\\\\"
Eu até mesmo citei os caracteres de grep
acima, embora isso não seja necessário (como nenhum dos g
, r
, e
, p
são especiais para o shell (exceto no shell Bourne se eles aparecem em $IFS
. O único caractere que eu não citei é o caractere de espaço, já que precisamos do seu significado especial no shell: argumentos separados.
Para procurar \\"
, desde que não seja precedido por outra barra invertida
grep -e '^\\\"' -e '[^\]\\\"'
Ou seja, procure \\"
no início da linha ou siga um caractere diferente de barra invertida.
Dessa vez, precisamos usar uma expressão regular, o que uma pesquisa de sequência fixa não fará.
grep
retorna as linhas que correspondem a qualquer uma dessas expressões. Você também pode escrever com uma expressão por linha:
grep '^\\\"
[^\]\\\"'
Ou com apenas uma expressão:
grep '^\(.*[^\]\)\{0,1\}\\{3\}"' # BRE
grep -E '^(.*[^\])?\{3}"' # ERE equivalent
grep -E '(^|[^\])\{3}"'
Com o GNU grep
construído com suporte a PCRE, você pode usar uma declaração negativa com olhar para trás:
grep -P '(?<!\)\{3}"'
Obter uma contagem de correspondências
Para obter uma contagem das linhas que correspondem ao padrão (isto é, que têm uma ou mais ocorrências de \\"
), adicione a opção -c
a grep
. Se, no entanto, você quiser o número de ocorrências, poderá usar a opção -o
específica do GNU (embora agora também suportada por algumas outras implementações) para imprimir todas as correspondências uma por linha e, em seguida, encaminhar para wc -l
para obter uma linha Contagem:
grep -Po '(?<!\)\{3}"' | wc -l
Ou de forma padrão / POSIXly, use awk
:
awk '{n+=gsub(/(^|[^\])\{3}"/,"")};END{print 0+n}'
( awk
' gsub()
substitui e retorna o número de substituições).