2009-10-27 60 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