Você também pode usar cut
:
cut -d= -f2- <<< "$yourvar"
ou
some_command | cut -d= -f2-
-
-d=
define o delimitador como=
-
-f2-
recebe o segundo campo e todos os seguintes
Estou com dificuldades para descobrir como usar sed
para cortar texto antes de um determinado delimitador.
Estou recebendo a saída de echo
que retorna algo semelhante a:
valueA=TEXT
Eu gostaria de ter sed
cortado o texto antes de =
e deixando apenas TEXT.
Alguma dica de como isso pode ser feito?
Você também pode usar cut
:
cut -d= -f2- <<< "$yourvar"
ou
some_command | cut -d= -f2-
-d=
define o delimitador como =
-f2-
recebe o segundo campo e todos os seguintes Do comentário de @ Archemar, que provavelmente deveria ter sido uma resposta:
sed -e s/^[^=]*=//
A partir do comentário do @Baard Kopperud, o comando sed
pode ser explicado como:
Substitua as linhas (s /) iniciando (^) por qualquer número de caracteres (*), exceto "=" ([^ =]) seguido por um sinal de equação (=) sem nada (//). Isso removerá qualquer coisa desde o início da linha até e incluindo o canto igual - deixando apenas o que vem depois do "=". Você precisa do "[^ =] *" no caso de existirem múltiplos sinais de igual ... você só deseja excluir até o primeiro. Se você acabou de usar ". *", Você cortaria até e incluiria o último sinal de igual, já que as expressões regulares "desejam" ser o maior tempo possível e começar o máximo possível à esquerda.
I'm receiving output from
echo
Se você estiver formando echo
a partir de uma variável, poderá usar os recursos de manipulação de strings integrados do shell:
# Instead of value=$(echo "$var" | cut -d= -f2-)
value=${var#*=}
O *=
é apenas um padrão no estilo glob, em que *
corresponde a qualquer coisa. O #
indica que o padrão corresponde a um prefixo a ser removido da variável.
Isso será mais rápido e mais confiável do que o piping de echo
, pois evita o problema com o qual xpg_echo
pode entrar (bem como outras peculiaridades de análise de echo
), e evita uma bifurcação. / p>
Você também pode obter a chave usando este método:
key=${var%%=*}
Observe que %%
é usado em vez de %
para corresponder com avidez. Com isso, ele não será ativado por nenhum sinal =
em potencial no valor.
A sintaxe está documentada em man bash
, em Parameter Expansion
:
${parameter#word} ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ''#'' case) or the longest matching pat‐ tern (the ''##'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each positional parame‐ ter in turn, and the expansion is the resultant list. If param‐ eter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. ${parameter%word} ${parameter%%word} Remove matching suffix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ''%'' case) or the longest matching pattern (the ''%%'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each posi‐ tional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.
Tags text-processing sed