Qual é a maneira mais simples de extrair substring no shell Unix (com regex)?
Meios simples:
- menos recurso
- menos opções
- menos estudo
Atualizar
Percebi que a própria regex está em conflito com a simplicidade e escolhi a mais simples cut
como a resposta escolhida. Desculpe a pergunta vaga. Mudei o título para representar o estado atual deste controle de qualidade com mais precisão.
cut
pode ser útil:Shell Builtins também são bons para isso, aqui está um script de exemplo:
Isso produz:
E de acordo com o Gnudif acima, sempre há sed/awk/perl para quando as coisas ficam realmente difíceis.
Shells Unix tradicionalmente não possuem suporte a regex embutido. Bash e Zsh fazem isso, então se você usar o
=~
operador para comparar uma string com um regex, então:Você pode obter as substrings do
$BASH_REMATCH
array no bash.No Zsh, se a
BASH_REMATCH
opção shell estiver definida, o valor está no$BASH_REMATCH
array, senão está no$MATCH/$match
par de variáveis vinculado (um escalar, o outro um array). Se aRE_MATCH_PCRE
opção for definida, o mecanismo PCRE será usado, caso contrário, as bibliotecas regexp do sistema, para uma correspondência de sintaxe regexp estendida, conforme o bash.Então, de forma mais simples: se você estiver usando o bash:
Se você não estiver usando Bash ou Zsh, fica mais complicado, pois você precisa usar comandos externos.
Considere também
/usr/bin/expr
.Você também pode combinar padrões com o início de strings.
grep e sed são provavelmente as ferramentas que você deseja, dependendo da estrutura do texto.
sed deve fazer o truque, se você não sabe o que é a substring, mas conhece algum padrão que está ao redor dela.
por exemplo, se você quiser encontrar uma substring de dígitos que comece com um sinal "#", você pode escrever algo como:
grep poderia fazer algo semelhante, mas a questão é o que você precisa fazer com a substring e se estamos falando de texto delimitado por linha normal ou não.