看板 Linux 關於我們 聯絡資訊
我在/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
karrigan912: sed 's/\(disable.*=\) .*/\1 no/g' 04/23 18:02
謝謝1樓,以下是我後來的用法 sed -r 's/(disable.*=) .*/\1 no/g' /tmp/t.sh -i
clementchen: 導到一個暫存檔再mv蓋掉原檔不就好了? 04/23 19:58
nastygirl: 不需要pipe sed -i 's/disable=yes/disable=no/g' t.sh 04/23 22:24
disable=後面有二個tab空白, 所以disable=yes抓不到
jbee: sed -i '/disable/{s/yes/no/g}' t.sh 04/25 14:38
謝謝4 & 5樓,這種寫法真是清楚又好懂
hijkxyzuw: sed -i '/disable/ s/yes/no/g' t.sh 04/26 15:49
rickieyang: 為什麼全部人給的 sed 都加了 g ... 04/26 20:34
holishing: 這樣有比較global (? 04/26 22:41
Xunion: 同6樓 04/27 15:04
Xunion: 5樓才對 04/27 15:05
※ 編輯: tutu (140.110.200.41), 04/29/2019 11:00:36
lantw44: 加 g 應該就是習慣吧,沒加只會取代一行中的第一項 04/29 22:59
rickieyang: 我知道只會取代一項, 所以才問原始需求加 g 要幹嘛... 04/30 01:36
holishing: 可能沒看圖/覺得用在其他類似地方也通吧? 不知道XD 04/30 03:37