Eu tenho uma lista de reprodução separada por ponto e vírgula no seguinte formato:
Thåström ; Stjärna som är din ; Skebokvarnsv. 209
Quero substituir o primeiro ;
por um travessão (-) e o segundo ;
pela string "- Álbum: "
Estou tentando com a seguinte construção mas não está certo:
sed 's/\;/\-/1;s/\;/\-\ Album\:/2'
Os resultados da broca são:
Thåström - Stjärna som är din ; Skebokvarnsv. 209
Sei que a parte errada está no primeiro segmento, pois se eu apenas executar sed 's/\;/\-\ "Album\:"/2'
obtenho os resultados corretos no final da linha:
Thåström ; Stjärna som är din - Album: Skebokvarnsv. 209
Qualquer ajuda é muito apreciada!
Estou executando isso no estoque 'sed' no MacOS 13.5.2
Acho que você está muito perto de ter o que deseja. Optei por uma construção que usava apenas duas expressões especificadas na linha de comando. Você também pode colocá-los em um arquivo e usar a
-f <command_file>
opção, se preferirA primeira expressão fará a substituição pelo primeiro ponto e vírgula da linha. A segunda expressão altera a próxima. Como eles são processados sequencialmente, não preciso me preocupar em especificar um sinalizador numérico no final, como faz o seu exemplo.
Exemplo com uma linha extra em branco para separar a saída.
ETA: No seu exemplo original, a segunda expressão tem a
2
como sinalizador. Isso substituirá o segundo;
. No entanto, sua primeira substituição substituiu a primeira;
, portanto seu comando está tentando substituir a terceira;
na linha. Se você simplesmente abandonar isso,2
deverá funcionar conforme o esperado.Usando
gawk
:Para substituir o mesmo padrão por strings diferentes várias vezes, o seguinte pode ser usado.
Usando Raku (anteriormente conhecido como Perl_6)
Raku é uma linguagem de programação da família Perl de linguagens de programação. Acima, você usa os
-ne
sinalizadores de linha de comando sem impressão automática e simplesmente executa duasS///
substituições consecutivas seguidas por output
. Aput
chamada adiciona uma nova linha no final da linha para você.Entrada de amostra:
Saída de amostra:
O aspecto realmente interessante do Raku é que ele está pronto para Unicode. Portanto, você pode usar características Unicode para filtrar e/ou substituir seu texto:
Entrada de amostra:
Saída de amostra:
Acima, três letras rúnicas são inseridas na entrada de amostra. As expressões regulares Raku podem identificar e/ou filtrar caracteres com base em sua designação Unicode-Script (neste caso
<:Script<Runic>>
). Mesmo que o StackOverflow pareça incapaz de exibi-los, as letras rúnicas são substituídas corretamente pelo⁒
"sinal de menos comercial" Unicode ( U+2052 ).https://www.unicode.org/charts/PDF/U16A0.pdf
https://docs.raku.org/language/regexes
https://raku.org