Eu tenho uma string como AxxBCyyyDEFzzLMN e eu quero substituir todas as ocorrências de x , y , e z com _ .
Como posso conseguir isso?
Sei que echo "$string" | tr 'x' '_' | tr 'y' '_'
isso funcionaria, mas quero fazer isso de uma só vez, sem usar canos.
AxyzB
? Três sublinhados ou um?tr '[xyz]'
irá substituir[
e]
também. O argumento deve ser simplesmente uma lista de caracteres (embora intervalos comoa-z
estejam corretos e, em algumas implementações, classes de caracteres POSIX como[:digit:]
).Respostas:
substituiria cada ocorrência de
x
,y
ouz
com_
, fornecendoA__BC___DEF__LMN
no seu exemplo.substituiria ocorrências repetidas de
x
,y
ouz
por uma única_
, fornecendoA_BC_DEF_LMN
no seu exemplo.fonte
,[]{}()~
caracteres. Quero substituí-lo por cada caractere especial escapado de'\'
como eu poderia fazer isso com o oneshot?gsed
binário:$ brew install gnu-sed
então$ gsed -r 's/[xyz]+/_/g'
sed -E
é (basicamente) equivalente ased -r
muitas distribuições do Linux. Se você usarsed 's/[xyz][xyz]*/_/g'
, não precisará da opção. Claro, isso é equivalente atr -s xyz _
nenhuma necessidade realsed
aqui.tr
para isso.sed 's/[][{}()~,]/\\&/g'
mas, realmente, faça uma nova pergunta se você tiver uma pergunta de acompanhamento (fique à vontade para voltar aqui para referência, é claro). Aliás,,
e~
não são metacaracteres regex (embora sejam~
expandidos para$HOME
algumas posições por Bash e outras conchas; nosh
entanto, não ).Usando a expansão do parâmetro Bash :
fonte
bash
. Outras conchas podem não funcionar (embora algumas funcionem).sed
se o bash possui uma substituição embutida?Você pode achar este link útil:
http://tldp.org/LDP/abs/html/string-manipulation.html
Em geral,
Para substituir a primeira correspondência de $ substring por $ replace:
Para substituir todas as correspondências de $ substring por $ replace:
EDIT: Observe que isso se aplica a uma variável chamada $ string.
fonte
^ use quantos deles for necessário e você pode criar sua própria criptografia BASIC
fonte
Aqui está uma solução com expansão de parâmetro do shell que substitui várias ocorrências contíguas por uma única
_
:Observe que o padrão requer correspondência estendida de padrão, ativada com
+(pattern)
Como alternativa, com a opção
-s
("squeeze") detr
:fonte