【发布时间】:2009-10-27 05:14:38
【问题描述】:
我的 shell 脚本中有一个变量可以按照我的预期工作。 但是当我使用该变量作为文件名时,我得到 ??在字符串的开头。如何修剪垃圾字符?
我使用 $(some command) 来创建这个变量。
【问题讨论】:
我的 shell 脚本中有一个变量可以按照我的预期工作。 但是当我使用该变量作为文件名时,我得到 ??在字符串的开头。如何修剪垃圾字符?
我使用 $(some command) 来创建这个变量。
【问题讨论】:
修复变量的方法有很多种,但首先我们需要知道要删除什么(即someCommand 的输出)。
例如,如果它总是在前面放置两个您不需要的字符,您可以使用:
x=$(someCommand | cut -c3-)
如果您想去除输出中 0x20 到 0x7e 范围之外的所有字符(ASCII 中的不可打印字符),您可以使用:
x=$(someCommand | tr -d '[\000-\037\177]')
理想情况下,您应该运行 someCommand | od -xcb 来获取其输出内容的实际十六进制转储。然后我们可以进一步帮助您。
更新:
根据您的新数据(输出为\n\nSomeName27-Oct-2009-14-33.sql.zip),您应该能够使用sed '/^$/d' 去除空行。
pax> echo '
SomeName27-Oct-2009-14-33.sql.zip' | od -xcb
0000000 0a0a 6f53 656d 614e 656d 3732 4f2d 7463
\n \n S o m e N a m e 2 7 - O c t
012 012 123 157 155 145 116 141 155 145 062 067 055 117 143 164
0000020 322d 3030 2d39 3431 332d 2e33 7173 2e6c
- 2 0 0 9 - 1 4 - 3 3 . s q l .
055 062 060 060 071 055 061 064 055 063 063 056 163 161 154 056
0000040 697a 0a70
z i p \n
172 151 160 012
0000044
pax> echo '
SomeName27-Oct-2009-14-33.sql.zip' | sed '/^$/d' | od -xcb
0000000 6f53 656d 614e 656d 3732 4f2d 7463 322d
S o m e N a m e 2 7 - O c t - 2
123 157 155 145 116 141 155 145 062 067 055 117 143 164 055 062
0000020 3030 2d39 3431 332d 2e33 7173 2e6c 697a
0 0 9 - 1 4 - 3 3 . s q l . z i
060 060 071 055 061 064 055 063 063 056 163 161 154 056 172 151
0000040 0a70
p \n
160 012
0000042
假设那些\n 标记实际上是两个 换行符({'\n','\n'})。如果(出于某种奇怪的原因)它们是 四个 字符 {'\\','n','\\','n'},请改用 cut -c5-。
【讨论】:
我建议的一种简单方法是使用带有 -d 选项的 tr 命令来删除 ?
文件名=$filename | tr -d '?'
【讨论】:
文件名=echo $filename | sed 's/\?//g
【讨论】: