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 / 410621
Accepted
FaxMax
FaxMax
Asked: 2017-12-14 04:29:11 +0800 CST2017-12-14 04:29:11 +0800 CST 2017-12-14 04:29:11 +0800 CST

sed remove espaços (codificação múltipla) do final da linha

  • 772

Eu gosto de remover espaços do começo e do fim da linha.

result="$(mysql -r --column-names=0 -e "SELECT String FROM Table")"
echo $result | cat -E
+stringA +StringB     $
echo $result | sed 's/^\([[:blank:]]\)\+//g' | sed 's/\([[:blank:]]\)\+$//g' | cat -E
+stringA +StringB     $

Copiei a string com o mouse e a inseri com a tecla 3 do mouse (pressione a roda)

echo '+stringA +StringB     ' | sed 's/^\([[:blank:]]\)\+//g' | sed 's/\([[:blank:]]\)\+$//g' | cat -E
+stringA +StringB     $

agora eu pressionei a tecla ↑, navegue até os espaços e substitua por dele space

echo '+stringA +StringB     ' | sed 's/^\([[:blank:]]\)\+//g' | sed 's/\([[:blank:]]\)\+$//g' | cat -E
+stringA +StringB$

e agora o sedcomando correspondeu e excluiu os espaços . Como posso converterespaços errados espaço sem quebra para espaços normais ?

echo $LANG
en_US.UTF-8
$bash --version
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
mysql -e "SHOW VARIABLES LIKE '%char%'"
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Atualização1:

echo '+stringA +stringB         ' | od -tx1z
0000000 2b 73 74 72 69 6e 67 41 20 2b 73 74 72 69 6e 67  >+stringA +string<
0000020 42 c2 a0 c2 a0 c2 a0 c2 a0 c2 a0 c2 a0 c2 a0 c2  >B...............<
0000040 a0 c2 a0 0a                                      >....<
0000044
echo '+stringA +stringB         ' | od -tx1z
0000000 2b 73 74 72 69 6e 67 41 20 2b 73 74 72 69 6e 67  >+stringA +string<
0000020 42 20 20 20 20 20 20 20 20 20 0a                 >B         .<
0000033
echo '+stringA +stringB         ' | od -c
0000000   +   s   t   r   i   n   g   A       +   s   t   r   i   n   g
0000020   B 302 240 302 240 302 240 302 240 302 240 302 240 302 240 302
0000040 240 302 240  \n
0000044
echo '+stringA +stringB         ' | od -c
0000000   +   s   t   r   i   n   g   A       +   s   t   r   i   n   g
0000020   B                                      \n
0000033

os echo-comandos 1 e 3 são copiados com a tecla do mouse 3 os echo-comandos 2 e 4 são com espaços normais

Atualização2:

eu inseri o sedcomando com [^[:graph:]]mas não muda o out.

for UKWID in 123 456 678; do
    result="$(mysql -r --column-names=0 -e "SELECT String FROM Table WHERE id = $UKWID")"
    echo "$result" | sed 's/^[^[:graph:]]*//;s/[^[:graph:]]*//' | cat -E
done
+stringA +stringB         $
   +stringc +stringx    $
+stringe +stringf      $
text-processing sed
  • 2 2 respostas
  • 1280 Views

2 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2017-12-14T05:07:35+08:002017-12-14T05:07:35+08:00

    Existem espaços em branco (como U+00A0 o espaço ininterrupto) ou caracteres invisíveis (como backspace ou U+200B) que não são classificados como [:blank:]ou mesmo [:space:]em alguns locais.

    Em teoria, você deve ser capaz de cortar todos os caracteres não gráficos com:

    sed 's/^[^[:graph:]]*//;s/[^[:graph:]]*$//'
    

    Mas novamente em alguns locais em alguns sistemas que não funcionam para U+00A0.

    perl -Mopen=locale -lpe 's/^\P{Graph}+|\P{Graph}+$//'
    

    Funciona para U+00A0, mas não para U+200B

    Você também pode sempre adicionar esses caracteres individualmente por si mesmo. Usando a $'\u....'expansão do tipo zsh (também suportada por versões recentes do bash e alguns outros shells):

    trim=$'[[:space:][:cntrl:]\u00a0\u200b]*'
    sed "s/^$trim//;s/$trim\$//"
    
    • 4
  2. Praveen Kumar BS
    2017-12-14T06:41:33+08:002017-12-14T06:41:33+08:00

    Use o comando abaixo para remover espaços vazios no início e no final da linha
    Comando Avise-me para qualquer outro requisito adicional


     sed -r "s/^\s+//g"| sed -r "s/\s+$//g"
    

    • -1

relate perguntas

  • Como remover uma única linha entre duas linhas

  • 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

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

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

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +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
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +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
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +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