2013-11-25 42 views
0

我想刪除在形式菜單命令的一部分 -自動刪除的菜單項的bash腳本

[exec] (foobar) {/usr/lib/xscreensaver/foobar -root} 

,並有50多個命令被刪除一個bash腳本的一部分。但是,我該怎麼做呢?我需要一些形式的命令,我可以將它們放入我的菜單生成腳本中,該腳本將在未來自動刪除它們。

+0

這個問題還不清楚。我猜你可以使用:'sed -e'/^\ [exec \]/d'-i file-with menu'。如果這不是您想要達到的結果,請以更準確的方式描述您的問題。 – ArturFH

+0

這是fluxbox菜單的一行,有50多行喜歡它。它們沒有任何作用,所以我希望在生成菜單時將它們刪除,但隨着每個安裝的新程序都重新生成菜單,所以需要再次刪除它們。所以我需要一個可以添加到自動生成腳本的命令,它將再次刪除它們。由於這些是菜單項,因此它們位於名爲「菜單」的文件中。要刪除的菜單行將始終包含{/ usr/lib/xscreensaver/*** -root},因此可用作標識符。這有幫助嗎? – boudiccas

+0

不過,我不知道,你想要刪除的行的共同部分是什麼。嘗試調整正則表達式 - 用不需要的行通用的模式替換'^ \ [exec \]'。但是,知道這個問題,如果你找到負責生成這些條目並刪除它的源文件會更好。我不知道你使用的是什麼發行版,但你可以從/ usr/share/menu開始。 – ArturFH

回答

0

這工作 -

sed -i '\|\[exec[]]\s[(].*[)]\s[{]/usr/lib/xscreensaver/.*\s-root[}]|d' ~/.fluxbox/menu; sed -i '\|\[exec[]]\s[(].*[)]\s[{]\b\(xscreensaver\).*[}]|d' ~/.fluxbox/menu 

當心換行,這是所有一行。但是,有沒有更好的方法?

+0

你可以考慮縮短表達的一點。也許只是/ xscreensaver /將是足夠的模式。你可以用'sed -n'/ pattern/p'file'來檢查將被刪除的內容。如果你運行'sed'/ pattern/d'file',沒有'-i'選項,你會看到你的文件看起來像什麼。 – ArturFH