de alguma maneira podemos mudar o delimitador que usa grep?
Eu acho que, por padrão, o grep usa \n
como delimitador.
linux
shell-script
grep
studiohack
fonte
fonte
$/
) e awk (RS
). Ou você poderia fazer algo assimecho "$var" | sed 's/<delimiter>/\n/' | grep <pattern>
. Muitas respostas, dependendo do seu problema real.Respostas:
Se você se importa apenas com a saída,
tr
pode funcionar para você:fonte
echo $my_var | tr @ '\n' | grep blahblah
$my var
para preservar espaços em branco e novas linhas, ou sejaecho "$my_var" | ...
.agrep
da Universidade do Arizona permite definir o delimitador. Não é um substituto para o grep; ele usa um algoritmo diferente (grep aproximado, pode corresponder a erros) e possui uma sintaxe de padrão diferente. Mas é uma ferramenta útil.Infelizmente, acho que, devido a problemas de licenciamento, houve vários projetos semelhantes chamados
agrep
e nem todos são compatíveis. Mas acho que todas as versões permitem definir um delimitador.fonte
fonte
d="${1}"
vez de apenasd="$1"
? (2) Você precisa expandir o seu aviso: Se isso for usado com vários arquivos, você também terá um problema se algum dos nomes de arquivo contiver `@ '. (3) (Nit pick) Um verdadeiro emulador de substituição / grep também funcionaria com zero argumentos de arquivo.Substitua o delimitador zero ('@') por uma nova linha (\ n) antes de grep:
fonte
Como é isso ? Alguma utilidade?
Defina '@' conforme a sua necessidade.
fonte