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 / 683191
Accepted
Emilio Galarraga
Emilio Galarraga
Asked: 2021-12-21 06:37:45 +0800 CST2021-12-21 06:37:45 +0800 CST 2021-12-21 06:37:45 +0800 CST

Converter linha com palavras entre aspas simples e separadas por vírgula em uma coluna

  • 772

Eu tenho este arquivo:
'dog', 'cat', 'horse', 'turtle'

Eu quero converter a linha para:

dog
cat
horse
turtle

se eu usar apenas a vírgula como separador e o comando tr posso fazer:
tr -s ',' '\n' < file

com a saída

'dog'
 'cat'
 'horse'
 'turtle'

Mas quando eu uso ', 'como separador, isso não funciona:

tr -s '\', \'' '\n' < file

mesmo se eu usar a barra dupla invertida para escapar das aspas simples, ainda não funciona. A única saída que recebo no terminal é >.

Como faço para escapar corretamente as aspas simples para obter a saída desejada?

awk text-processing
  • 9 9 respostas
  • 1067 Views

9 respostas

  • Voted
  1. they
    2021-12-21T12:19:59+08:002021-12-21T12:19:59+08:00

    Tratando a entrada como CSV citado, com espaço em branco ignorável após cada delimitador de vírgula e usando aspas simples em vez das aspas duplas padrão como caracteres de aspas, podemos usar csvformatpara reformatar os dados:

    $ csvformat -S -q "'" -D $'\n' file
    dog
    cat
    horse
    turtle
    

    Isso usa csvformatwith -Spara pular os caracteres de espaço em branco iniciais após cada delimitador, -q "'"para definir o caractere de aspas de entrada para uma aspa simples e, em seguida, -D $'\n'para definir o delimitador de campo de saída para um caractere de nova linha.

    O arquivo é então reformatado.

    Qualquer campo usando novas linhas incorporadas seria citado na saída, assim como o campo contendo aspas duplas incorporadas.

    • 5
  2. White Owl
    2021-12-21T06:57:19+08:002021-12-21T06:57:19+08:00

    trfunciona em conjuntos, não em strings. Cada primeiro símbolo do primeiro conjunto é substituído pelo primeiro símbolo do segundo conjunto, segundo símbolo do primeiro conjunto por um segundo símbolo de um segundo conjunto, etc.

    Se o segundo conjunto tiver menos símbolos que o primeiro - todos os símbolos do primeiro conjunto que não possuem um par adequado são substituídos pelo último símbolo do segundo conjunto.

    Você precisa

    tr -s "\', "  '\n' < file
    

    Cada apóstrofo, vírgula e espaço é substituído por alimentação de linha, mas a opção -s comprime todos eles em uma instância de LF.

    • 4
  3. Ed Morton
    2021-12-21T09:29:58+08:002021-12-21T09:29:58+08:00
    $ awk -F"'" '{for (i=2;i<=NF;i+=2) print $i}' file
    dog
    cat
    horse
    turtle
    
    • 3
  4. Stéphane Chazelas
    2021-12-21T10:34:26+08:002021-12-21T10:34:26+08:00

    Com GNU grepou compatível quando construído com suporte pcre:

    grep -Po "[\s,']*\K[^']*" < file
    

    Observe que ele pula strings entre aspas vazias (como em 'empty', 'like', '').

    [\s,']pula todos os espaços em branco, vírgulas e aspas simples, e então mantemos Ko seguinte: a próxima seqüência de não 'caracteres.

    • 3
  5. HatLess
    2021-12-21T08:01:45+08:002021-12-21T08:01:45+08:00

    Usandosed

    $ sed "s/\([^,]*\), /\1\n/g;s/'//g" input_file
    dog
    cat
    horse
    turtle
    
    • 2
  6. rowboat
    2021-12-22T01:19:54+08:002021-12-22T01:19:54+08:00
    $ awk '!(NR%2)' RS=\' file
    dog
    cat
    horse
    turtle
    
    • 2
  7. Best Answer
    schrodingerscatcuriosity
    2021-12-21T07:39:57+08:002021-12-21T07:39:57+08:00

    Você pode usar este sedcomando:

    $ sed -e "s/', '/\n/g" -e "s/'//g" file 
    dog
    cat
    horse
    turtle
    
    • 1
  8. Carlos Pascual
    2021-12-21T10:38:55+08:002021-12-21T10:38:55+08:00
    awk '{gsub(/^.|.$/,"");gsub(/., *./,"\n")} 1' file
    dog
    cat
    horse
    turtle
    

    Veja também isto: http://awk.freeshell.org/PrintASingleQuote Se nos basearmos em sua referência, podemos fazer:

    awk '{gsub("\047","");gsub(/, */,"\n")} 1' file
    dog
    cat
    horse
    turtle 
    
    • ou:
    awk -v q="'" '{gsub(q,"");gsub(/, */,"\n")} 1' file
    dog
    cat
    horse
    turtle
    
    • 0
  9. user61863
    2022-01-20T02:12:01+08:002022-01-20T02:12:01+08:00
    python -c "for s in eval(input()): print(s)" < file
    dog
    cat
    horse
    turtle
    
    • 0

relate perguntas

  • Reorganize as letras e compare duas palavras

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Embaralhamento de arquivo de várias linhas

  • como posso alterar o caso do caractere (de baixo para cima e vice-versa)? ao mesmo tempo [duplicado]

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

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

    • 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

    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
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • 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
    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

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