从变量中修剪垃圾字符

时间:2009-10-27 05:14:39

标签: unix shell

我的shell脚本中有一个变量可以按照我的预期运行。 但是当我使用该变量作为文件名时,我得到??在字符串的开头。如何修剪垃圾字符?

我使用$(某些命令)来创建这个变量。

3 个答案:

答案 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