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 sed
comando 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 sed
comando 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 $
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:
Mas novamente em alguns locais em alguns sistemas que não funcionam para U+00A0.
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):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