我的shell脚本中有一个变量可以按照我的预期运行。 但是当我使用该变量作为文件名时,我得到??在字符串的开头。如何修剪垃圾字符?
我使用$(某些命令)来创建这个变量。
答案 0 :(得分:1)
有许多方法可以修复你的变量,但首先我们需要知道要摆脱什么(即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-
。
答案 1 :(得分:0)
我建议的一个简单方法是使用带有-d选项的tr命令来删除?
文件名= $filename | tr -d '?'
答案 2 :(得分:0)
文件名= echo $filename | sed 's/\?//g