[問題] sed用法

看板Linux作者時間6年前 (2019/04/23 17:41), 6年前編輯推噓7(705)
留言12則, 9人參與, 6年前最新討論串1/1
我在/tmp/下有個t.sh檔 裡面的內容 我想將其中一行後面的yes改成no 如下圖(黃色是我所下的指令) https://imgur.com/N1FM2pW.jpg
由於t.sh檔內的yes有二處,但我只需disable=yes改no而已, 所以我下sed指令時 不能單純搜尋yes改no 目前下的指令 sed -n '/disable/p' /tmp/t.sh |sed 's/yes/no/g' 所顯示到營幕的結果是我期望的,但這指令並無真正改到檔案 試過 sed -i '/disable/p' /tmp/t.sh |sed 's/yes/no/g' (結果為多插入一行) sed -n '/disable/p' /tmp/t.sh |sed -i 's/yes/no/g' (結果顯示要輸入檔案) sed -n '/disable/p' /tmp/t.sh |sed -i 's/yes/no/g' /tmp/t.sh (結果二處yes都被改no) 請問大家有解法嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.110.200.41 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1556012509.A.83A.html

04/23 18:02, 6年前 , 1F
sed 's/\(disable.*=\) .*/\1 no/g'
04/23 18:02, 1F
謝謝1樓,以下是我後來的用法 sed -r 's/(disable.*=) .*/\1 no/g' /tmp/t.sh -i

04/23 19:58, 6年前 , 2F
導到一個暫存檔再mv蓋掉原檔不就好了?
04/23 19:58, 2F

04/23 22:24, 6年前 , 3F
不需要pipe sed -i 's/disable=yes/disable=no/g' t.sh
04/23 22:24, 3F
disable=後面有二個tab空白, 所以disable=yes抓不到

04/25 14:38, 6年前 , 4F
sed -i '/disable/{s/yes/no/g}' t.sh
04/25 14:38, 4F
謝謝4 & 5樓,這種寫法真是清楚又好懂

04/26 15:49, 6年前 , 5F
sed -i '/disable/ s/yes/no/g' t.sh
04/26 15:49, 5F

04/26 20:34, 6年前 , 6F
為什麼全部人給的 sed 都加了 g ...
04/26 20:34, 6F

04/26 22:41, 6年前 , 7F
這樣有比較global (?
04/26 22:41, 7F

04/27 15:04, 6年前 , 8F
同6樓
04/27 15:04, 8F

04/27 15:05, 6年前 , 9F
5樓才對
04/27 15:05, 9F
※ 編輯: tutu (140.110.200.41), 04/29/2019 11:00:36

04/29 22:59, 6年前 , 10F
加 g 應該就是習慣吧,沒加只會取代一行中的第一項
04/29 22:59, 10F

04/30 01:36, 6年前 , 11F
我知道只會取代一項, 所以才問原始需求加 g 要幹嘛...
04/30 01:36, 11F

04/30 03:37, 6年前 , 12F
可能沒看圖/覺得用在其他類似地方也通吧? 不知道XD
04/30 03:37, 12F
文章代碼(AID): #1SljtTWw (Linux)
文章代碼(AID): #1SljtTWw (Linux)