Por padrão, grep
usa Expressões regulares básicas (BRE), que não são suporte {N}
. Se funcionar na linha de comando, você provavelmente terá grep
alias para grep -E
ou grep -P
. Você pode verificar executando
alias | grep grep
Os aliases não estão habilitados em scripts. Conforme explicado em man bash
:
Aliases are not expanded when the shell is not interactive, unless the
expand_aliases shell option is set using shopt.
Assim, em um shell não interativo, que é o que você obtém quando executa um script, os aliases não funcionam. Você tem duas opções, ativar os aliases explicitamente em seu script e, em seguida, fonte seu arquivo ~/.bashrc
para obter as definições de alias (não há necessidade de escapar do ,
, a propósito):
#!/bin/bash
shopt -s expand_aliases
source ~/.bashrc
grep -o ',[a-z][a-z0-9]{1,7}' source.txt > test.txt
Ou, muito mais simples, use grep -E
no próprio script:
#!/bin/bash
grep -Eo ',[a-z][a-z0-9]{1,7}' source.txt > test.txt
Você também pode considerar as ferramentas como awk
projetadas para trabalhar com dados delimitados por campo Apesar. As chances são que eles vão tornar sua vida muito mais simples.