伊軍領袖
請問有關linux script一個小問題,現在要做的是需要一個.sh檔去修改設定檔裡面的參數
https://images.plurk.com/6zVEjA11UJdBUMYcrtmqQ4.png
以下是我寫的script
https://images.plurk.com/62fL2SON8FiUhOT4EKvveT.png
但是我執行了都會跑出以下錯誤訊息
https://images.plurk.com/7vLw7grcHn7Ly5fIriismI.png
請問我是哪個參數下錯了?
什麼都不會的韭菜海星
sed命令裡 value="xxx 這邊,在結尾處你少了一個雙引號

三行都是
什麼都不會的韭菜海星
而且在這之前的 雙引號括起來的 value 我覺得怪怪的
伊軍領袖
啊,因為這個造成誤判了......我本來是想打短一點,我再試試
伊軍領袖
改成這樣之後
https://images.plurk.com/1XP0tq4JZZL6i51Jd6qjit.png
變成這個錯誤訊息
https://images.plurk.com/2RhHnqsVstu9c1N6Xw8tmt.png
伊軍領袖
感覺是不是因為關鍵字裡面雙括號太多導致誤判?
伊軍領袖
把檔案直接複製到那個目錄裡面再裁掉路徑的部分
https://images.plurk.com/2czd1AioWB9Q2nPCqeSP5V.png
目錄裡面確定是有這個檔案的
https://images.plurk.com/440Sxz2NbBkGMoTVcZdDxk.png
然後回應我找不到檔案.....
https://images.plurk.com/4Lm33X4WOXabWHkR2wh1mK.png
什麼都不會的韭菜海星
我想一下,我八、九年沒用sed了
伊軍領袖
還是有其他方法可以達成,我就只是想要取代設定檔裡面的文字而已
什麼都不會的韭菜海星
<P Name那三行是要新增這三行,還是replace?
什麼都不會的韭菜海星
如果是replace的話
第一行試試這個
sed -e 's/<P Name="Schedule" Value=".*"\/>/<P Name="Schedule" Value="3"\/>/' -i.bak /opt/TrendMicro/SProtectLinux/tmsplx.xml
什麼都不會的韭菜海星
這會在replace同時,幫你建個 .bak的backup file...
什麼都不會的韭菜海星
後面兩個就依樣畫葫蘆啦
伊軍領袖
https://images.plurk.com/5HYabzrBHwHvw1Mdzg979C.png
變成這樣.....
什麼都不會的韭菜海星
你把第一行用cmdline 執行,不要在 https://scantime.sh 執行 試試看?
什麼都不會的韭菜海星
/opt/TrendMicro/SProtectLinux/tmsplx.xml 有在這位置嗎?
什麼都不會的韭菜海星
第二第三行 -e 的單引號哩,結尾的 / 你怎拿出單引號了?
那個sed -e 的命令格式是 -e 's/<%pattern%>/<%replace str%>/'
什麼都不會的韭菜海星
我給你那行,用ubuntu 20.04試過是可以的
伊軍領袖
https://images.plurk.com/1WNeWinyTXvksccHNWEjwP.png
伊軍領袖
我這個是Centos6
什麼都不會的韭菜海星
你看一下....copy出來cmdline執行那行不對
什麼都不會的韭菜海星
Value=".* 這邊,後面的雙引號被吃掉了
Value="3"這邊, /> 不對,少了反斜線的escape
什麼都不會的韭菜海星
tmsplx.xml能給我一份試試看嗎?
伊軍領袖
家上去之後可以了
伊軍領袖
在cmdline下
什麼都不會的韭菜海星
okok
剩下的同理可證 XD
什麼都不會的韭菜海星
shell script我記得是有些escape與命令字串處理不大一樣,你要查一下
伊軍領袖
那個原先的"1"改成".*"的原因是?
什麼都不會的韭菜海星
sed -e 's/ / /> 命令裡面是用正規表達式的
我不知道 tmsplx.xml 裡面那個 <P Name="Schedule" Value="" 的value 值會是多少,所以就寫 .*

其實應該 \d* 會比較好
什麼都不會的韭菜海星
你寫 "1" ,那如果你要改的檔案這邊的值是 Value="2" 那就會取代失敗,我用 .* 的話,Value="xxx" 不管他xxx是多少都會抓得到
伊軍領袖
https://images.plurk.com/7fcYCJwp5OhaqEQGmTYTvK.png
崩潰了,寫進script裡面跑出來就不一樣
什麼都不會的韭菜海星
我用script測試看一下怎回事
什麼都不會的韭菜海星
你script 是csh 還是bash?
伊軍領袖
.......怎麼看?印象中預設不是都bash嗎?
什麼都不會的韭菜海星
我這樣測試是可以的

https://images.plurk.com/BRgubZ6jXlZnNSXhG1yKX.png
什麼都不會的韭菜海星
第一行註解那邊,強制指定要用哪個shell跑這script
伊軍領袖
https://images.plurk.com/3aA9YJOJYwh4KxMcElZ8tL.png
........我的環境裡面好像沒有bash
伊軍領袖
https://images.plurk.com/6wjLeWZqp7kwAWvoOZ2nBm.png
什麼鬼.....yum裡面又說我有裝=_=
什麼都不會的韭菜海星
不是,你現在current shell是哪個?linux 有好幾種shell

沒指定的話就是用當前shell來執行script
伊軍領袖
https://images.plurk.com/17evHRSKysWiph4SmzFkry.png
靈異了,我的預設值就是bash.....然後上面居然給我跳沒有?
什麼都不會的韭菜海星
用cmdline測試命令對的話,就看一下你script哪裡設定不正確嚕....
伊軍領袖
那我再慢慢抓吧.....這問題真夠鳥的
伊軍領袖
Shell Script 報錯: bad interpreter: No such file or di...
..........居然是因為我先在windows那邊打好的鍋?
什麼都不會的韭菜海星
你的script看起來沒有 ^M 啊
換行符號很麻煩是真的
伊軍領袖
程式能跑了,但是後面兩行沒有替換到......還要再改
什麼都不會的韭菜海星
沒替換到多半是search pattern的問題,空格問題最容易發生

你對正規表達式熟練不?看看是不是有空格問題吧...或是用 \\s* 來濾
伊軍領袖
https://images.plurk.com/pJtPSg0HTEXlMY2gmr656.png
https://images.plurk.com/7GjXJB72pT4rzhJrDfc1R9.png
伊軍領袖
完全不會用正規表達式.....
伊軍領袖
一個要替換的是00:00:00還好,另外一個直接連空白都沒有
什麼都不會的韭菜海星
框起來的地方要寫 \/
https://images.plurk.com/4XdkE67cdaXMvXqZy6q7NG.png
什麼都不會的韭菜海星
框起來的地方你少寫了 /
什麼都不會的韭菜海星
要寫成 \/
伊軍領袖
成功了,感謝長輩協助
什麼都不會的韭菜海星
"ScheduledWDay" Value=""
這邊Value=""裡面也可以寫 .*

. 是 any char 的意思
* 是 0 ~ N 個字 的意思
什麼都不會的韭菜海星
正規表達式很好用,建議去看一下,練熟以後各種地方都能應用
伊軍領袖
恩恩,很多基本功以前連需要學都不知道......
什麼都不會的韭菜海星
晚點到家貼個regent cheat sheet 給你
伊軍領袖
感謝長輩
📛ちゃちゃN🔰
regex101
推薦這個測試ui
什麼都不會的韭菜海星
伊軍領袖
多謝
載入新的回覆