Digamos que eu tenho um arquivo contendo as seguintes duas linhas:
2014-05-05 09:11:53 /aa/bbbb/cccccc 29899
2014-05-05 09:12:17 /aa/bbbb/cccccc?dddddddd 16767
Eu preciso pegar a linha que contém /aa/bbbb/cccccc
apenas o padrão , não preciso da segunda linha que contém caracteres extras, ou seja ?dddddddd
. Agora, quando eu tentei
grep '/aa/bbbb/cccccc' file
Em seguida, as duas linhas estão sendo selecionadas. Eu preciso da linha completa, então grep -o
não poderia ser uma solução.
Qual poderia ser a solução possível usando grep, para que apenas a primeira linha seja selecionada com base no padrão de pesquisa?
fonte
grep '/aa/bbbb/cccccc ' file
/aa/bbbb/cccccc
string.grep -E '/aa/bbbb/cccccc(\s+|$)' file
grep -E '(^|\s)/aa/bbbb/cccccc(\s|$)' file
A maneira mais simples seria adicionar um espaço após o seu padrão:
Ou, para corresponder a todos os tipos de espaço em branco:
Ou
Ou, com uma aparência positiva :
Ou, com uma aparência negativa :
Ou você pode reverter a partida:
Ou, para também corresponder às linhas que não contêm nada além do seu padrão (sem espaços em branco à direita):
Ou, você pode apenas usar um pequeno script:
No awk:
Ou, se você não souber em qual campo seu padrão está
Em Perl
fonte
grep -v 'c?' file
porque você não usagrep -v '?' file
porque o arquivo tem apenas duas linhas.grep -v '?'
seria suficiente.Para complementar a resposta de @AvinashRaj , você também pode usar o comando como este.
fonte