2009-10-27 59 views
0

我的shell脚本中有一个变量,它按照我的期望工作。 但是,当我使用该变量作为文件名,我得到了?在字符串的开头。我如何修剪垃圾字符?从变量修剪垃圾字符

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

回答

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-

+0

\ n \ nSomeName27-Oct-2009-14-33.sql.zip ##欲去除第一2个新行字符。 – shantanuo 2009-10-27 09:05:01

+0

sed'/^$/d'##感谢这一点。我还有一个问题。我怎样才能删除两个单词之间的空格?某些名称27-Oct-2009-14-33.sql.zip – shantanuo 2009-10-27 12:01:00

+0

使用“sed's/// g'”删除所有空格(如果它不是立即显而易见的,则是前两个“/”字符之间的空格)。你可以把它和你的其他sed结合起来,如下所示:“sed -e'/^$/d'-e's/// g'”。 – paxdiablo 2009-10-27 12:12:42

0

我建议的一个简单方法是使用tr命令和-d选项来删除?


文件名= $filename | tr -d '?'

0

文件名= echo $filename | sed 's/\?//g