AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 435043
Accepted
forthrin
forthrin
Asked: 2018-04-03 04:27:45 +0800 CST2018-04-03 04:27:45 +0800 CST 2018-04-03 04:27:45 +0800 CST

Substituir caracteres UTF-8 por shell perl

  • 772

Como faço perlpara substituir corretamente o caractere UTF-8 de um shell?

Os exemplos usam stdin, mas preciso de algo que funcione perl ... filetambém.

Isto é o que eu espero:

$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABC[æ][ø][å]DEF

Isto é o que eu recebo:

$ echo ABCæøåDEF | perl -CS -pe "s/([æøå])/[\\1]/g"
ABCæøåDEF

Substituir os caracteres Unicode por ASCII funciona instantaneamente:

$ echo ABC123DEF | perl -CS -pe "s/([123])/[\\1]/g"
ABC[1][2][3]DEF

Meu ambiente:

perl 5.18.2
Bash 3.2.57
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
perl unicode
  • 3 3 respostas
  • 1923 Views

3 respostas

  • Voted
  1. Best Answer
    Gilles Quenot
    2018-04-03T04:54:45+08:002018-04-03T04:54:45+08:00

    Usa isto :

     $ echo 'ABCæøåDEF' |
        perl -CSD -Mutf8 -pe 's/([æøå])/[$1]/g'
    

    Funciona também para arquivos

    Resultado :

    ABC[æ][ø][å]DEF
    

    Observação :

    • substituições: \\1é para awk , \1é para sed e em perl usamos$1
    • verifique se perldoc perlrunhá -CSDtruques utf8
    • 8
  2. haukex
    2018-04-03T10:21:28+08:002018-04-03T10:21:28+08:00

    Sua entrada:

    $ cat input.txt 
    ABCæøåDEF
    $ hexdump -C input.txt 
    00000000  41 42 43 c3 a6 c3 b8 c3  a5 44 45 46 0a           |ABC......DEF.|
    0000000d
    

    Uma boa maneira de IMO é a -Copção mais utf8:

    $ perl -CSD -Mutf8 -pe 's/([æøå])/[$1]/g' input.txt 
    ABC[æ][ø][å]DEF
    $ cat input.txt | perl -CSD -Mutf8 -pe 's/([æøå])/[$1]/g'
    ABC[æ][ø][å]DEF
    

    Se você não quiser usar UTF-8 na linha de comando, sempre poderá escrever seu código Perl em ASCII simples e usar escapes como \xAB, \x{ABCD}ou em Perls mais recentes \N{U+ABCD}ou \N{CHARNAME}:

    $ perl -CSD -pe 's/([\xE6\xF8\xE5])/[$1]/g' input.txt 
    ABC[æ][ø][å]DEF
    $ cat input.txt | perl -CSD -pe 's/([\xE6\xF8\xE5])/[$1]/g'
    ABC[æ][ø][å]DEF
    

    Este está ficando um pouco criativo: @ARGVserá interpretado como UTF-8, então você pode manter seu código-fonte como ASCII e passar os caracteres UTF-8 por meio de um argumento de linha de comando (não necessariamente a melhor solução, apenas mostrando como você pode fazer uso da -CAopção):

    $ perl -CSDA -pe 'BEGIN{$p=shift;} s/($p)/[$1]/g' '[æøå]' input.txt 
    ABC[æ][ø][å]DEF
    $ cat input.txt | perl -CSDA -pe 'BEGIN{$p=shift;} s/($p)/[$1]/g' '[æøå]'
    ABC[æ][ø][å]DEF
    

    Ou, claro, você sempre pode transformar o oneliner em um script real, onde você pode

    use warnings;
    use 5.012;
    use utf8;
    use open qw/:std :encoding(UTF-8)/;
    use charnames qw/:full :short/;
    

    Leitura adicional: perlunitut , perlunifaq , perluniintro , perlunicode , perlunicook .

    • 1
  3. Porno Nacionais
    2018-04-03T10:26:52+08:002018-04-03T10:26:52+08:00

    $ echo 'ABCæøåDEF' | perl -CS -Mutf8 -pe 's/([æøå])/[$1]/g'

    • -2

relate perguntas

  • Correspondência de pares reversíveis em um arquivo CSV

  • Perl: é possível usar a substituição de variável?

  • Não é possível digitar trema usando o teclado

  • Empilhe til e barra sobre a letra

  • calcule a soma de cada 2 linhas e substitua-as por outro valor se a soma for menor que um valor específico

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve