Eu tenho o arquivo test_output_archive.svd com alguns cifrões ( $
). Eu gerei um script de shell Replace_dollar_pound.sh com o comando cat para substituir o símbolo do dólar pelo script Pound ( £
). O script está funcionando no Solaris 10, o dólar sendo substituído conforme o esperado. No Solaris 11, mas o dólar não está sendo reposto, não gerando erros
Conteúdo de test_output_archive.svd: Aluguel de linha $ 9 OOB apenas por $ 10
Substitua o símbolo do dólar por libra na etapa 1, remova caracteres inúteis na etapa 2, remova o arquivo temporário na etapa 3, renomeie na etapa 4 **
Conteúdo de Replace_dollar_pound.sh: gato test_output_archive.svd | tr "\044" "\243" > temp_archive.svd cat temp_archive.svd | tr -d "\302" > test_output_archive2.svd rm temp_archive.svd mv test_output_archive2.svd test_output_archive.svd
Alguma modificação a ser feita à medida que o sistema operacional é atualizado para Solaris 11 ??
Responder1
O $
tem um significado especial em expressões regulares, significa "o fim do registro" (record==line na maioria dos casos). Então, você precisa escapar disso. Experimente isto:
sed 's/\$/£/g' file > outfile
Responder2
Você pode escapar do caractere especial ($) no comando sed.
$ cat test.txt
£ pound £
$ dollar $
£ pound £
$ dollar $
$ sed 's/\$/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
Ou alternativamente
$ sed 's/[$]/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
Responder3
Você pode usar sed
para substituir todas as ocorrências de uma string conforme descritoaqui:
sed -i 's/\£/\$/g' FILENAME
A -i
opção diz sed
para operar em um arquivo, s
é o operador para substituir strings, \£
é a string que você precisa substituir, \$
é a string que substitui cada $
caractere ( \
escapa dos sinais porque são caracteres especiais) e g
significa substituir todas as instâncias.
EDITAR:a -i
opção não funciona no Solaris, você deve usaresseGambiarra.