我喜欢从行首和行尾删除空格。
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 $
我用鼠标复制了字符串,然后用鼠标键 3插入(按下滚轮)
echo '+stringA +StringB ' | sed 's/^\([[:blank:]]\)\+//g' | sed 's/\([[:blank:]]\)\+$//g' | cat -E
+stringA +StringB $
现在我按下键↑,导航到空格并将其替换为deland space
echo '+stringA +StringB ' | sed 's/^\([[:blank:]]\)\+//g' | sed 's/\([[:blank:]]\)\+$//g' | cat -E
+stringA +StringB$
现在该sed
命令匹配并删除了空格。我怎样才能转换错误的空格 正常空间的不间断空间?
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/ |
+--------------------------+----------------------------+
更新1:
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
-commands 1 和 3用echo
鼠标键 3 复制echo
-commands 2 和 4 带有普通空格
更新2:
我插入了sed
命令,[^[:graph:]]
但它并没有改变输出。
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 $
有空白(如 U+00A0 不间断空格)或不可见字符(如退格或 U+200B)未被归类为
[:blank:]
甚至[:space:]
在某些语言环境中。理论上,您应该能够修剪所有非图形字符:
但同样在某些系统中的某些语言环境中,它不适用于 U+00A0。
适用于您的 U+00A0,但不适用于 U+200B
您也可以自己单独添加这些字符。使用类似 zsh 的
$'\u....'
扩展(最近版本的 bash 和其他一些 shell 也支持):使用以下命令删除行首和行尾的空格
命令让我知道任何其他附加要求