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 / ubuntu / Perguntas / 1269817
Accepted
user2413
user2413
Asked: 2020-08-25 12:02:32 +0800 CST2020-08-25 12:02:32 +0800 CST 2020-08-25 12:02:32 +0800 CST

Substitua dois CR consecutivos por um

  • 772

cat -e file.txtdá:

{"yellow":"mango"}^M$
^M$
{"yellow":"banana"}^M$
^M$
{"yellow":"blabla"}^M$
^M$

e eu gostaria de ter apenas:

{""yellow":"mango"}^M$
{"yellow":"banana"}^M$
{"yellow":"blabla"}^M$

no lugar para todos os arquivos com extensão txt na pasta. Então eu tentei:

find . -type f -name "*.txt" -print0 | xargs -0 sed -i "s/^M$^M$/^M$/g"

para nenhum proveito. Alguém tem uma idéia melhor?

head -n 3 file.txt | od -bc

rendimentos:

0000000 173 042 171 145 154 154 157 167 042 072 042 155 141 156 147 157
          {   "   y   e   l   l   o   w   "   :   "   m   a   n   g   o
0000020 042 175 015 012 015 012 173 042 142 141 142 141 142 042 072 042
          "   }  \r  \n  \r  \n   {   "   b   a   b   a   b   "   :   "
0000040 155 141 156 147 157 042 175 015 012
          m   a   n   g   o   "   }  \r  \n
0000051

isto:

awk 1 RS='\r\n' ORS= < file.txt

remove as novas linhas completamente (então não é bom: quero manter uma das duas sucessivas em cada linha, mas faz alguma coisa).

command-line text-processing
  • 5 5 respostas
  • 2171 Views

5 respostas

  • Voted
  1. Best Answer
    MaxSilvester
    2020-08-25T12:45:29+08:002020-08-25T12:45:29+08:00

    Você pode usar sed -z 's/\r\n\r\n/\r\n/g'.

    Normalmente sedsó funciona em uma linha de cada vez. Ao usar a -zopção, sedfuncionará em linhas, que são separadas por 0bytes, que normalmente não existem em um arquivo de texto, então todo o arquivo será tratado como uma linha e as novas linhas poderão ser substituídas.

    (encontrado no stackoverflow e explicação adicionada)

    • 13
  2. Quasímodo
    2020-08-25T14:13:29+08:002020-08-25T14:13:29+08:00

    Você também pode excluir linhas que contenham apenas o retorno de carro.

    • Com GNU Sed:

      sed '/^\r$/d' file
      
    • Para uma máquina mínima, mas compatível com POSIX (aqui precisamos gerar o retorno de carro com Printf):

      sed "/^$(printf "\r")$/d" file
      

    ^corresponde ao início de linha e o último $, o fim de linha ( \n).

    Por exemplo:

    $ cat -e file
    AB^M$
    ^M$
    CB^M$
    ^M$
    $ sed '/^\r$/d' file|cat -e
    AB^M$
    CB^M$
    
    • 12
  3. J-L
    2020-08-26T09:05:23+08:002020-08-26T09:05:23+08:00

    Se não houver problema em remover todas as linhas em branco, você pode fazer:

    perl -wlne '/\S/ and print' old_file > new_file
    

    E se você preferir substituir seu(s) arquivo(s), você pode usar a -iopção (no local):

    perl -wlni.bak -e '/\S/ and print' file1 file2 file3 ...
    

    A linha acima copiará os arquivos originais como *.bakarquivos. Se você não se importa em ter backups, pode deixar de fora a .bakparte, assim:

    perl -wlni -e '/\S/ and print' file1 file2 file3 ...
    

    (Você pode até usar curingas, então em vez de file1 file2 file3 ...escrever file*.)

    A vantagem dessa abordagem é que ela faz alterações em seus arquivos de uma só vez (em vez de ter que executá-la uma vez para cada arquivo).

    Mas lembre-se: isso manterá apenas as linhas que contêm pelo menos um caractere que não seja espaço em branco. Portanto, se uma linha consiste apenas em cinco espaços, uma tabulação, um retorno de carro e um caractere de avanço de linha, ela não será mantida.

    • 2
  4. Rusty Lemur
    2020-08-27T04:21:15+08:002020-08-27T04:21:15+08:00

    Acho que você poderia usar o separador de registros e o separador de registros de saída do awk para atingir o objetivo, que deve ser mais eficiente em arquivos muito grandes do que arquivos sed -z ....

    awk '
      BEGIN {
        RS = "\r\n\r\n"
        ORS = "\r\n"
      }
    
      {
        print $0
      }
    
    ' inputFile > outputFile
    
    • 2
  5. jubilatious1
    2020-09-26T13:52:49+08:002020-09-26T13:52:49+08:00

    Usando Raku (a linguagem anteriormente conhecida como Perl6)

    ~$ raku -ne '.put if /\S/ ;' test_blank.txt
    {"yellow":"mango"}
    {"yellow":"banana"}
    {"yellow":"blabla"}
    

    O exemplo acima imprime apenas linhas que contêm caracteres que não são espaços em branco ( \Scorresponde a um único caractere que não é espaço em branco). Uma versão muito legível abaixo:

    ~$ raku -ne '.put if .chars;' test_blank.txt
    {"yellow":"mango"}
    {"yellow":"banana"}
    {"yellow":"blabla"}
    

    HTH.

    https://raku.org
    https://rakudo.org/downloads

    • 1

relate perguntas

Sidebar

Stats

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

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

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