我在/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://webptt.com/cn.aspx?n=bbs/Linux/M.1556012509.A.83A.html
1F:→ karrigan912: sed 's/\(disable.*=\) .*/\1 no/g' 04/23 18:02
谢谢1楼,以下是我後来的用法
sed -r 's/(disable.*=) .*/\1 no/g' /tmp/t.sh -i
2F:→ clementchen: 导到一个暂存档再mv盖掉原档不就好了? 04/23 19:58
3F:→ nastygirl: 不需要pipe sed -i 's/disable=yes/disable=no/g' t.sh 04/23 22:24
disable=後面有二个tab空白, 所以disable=yes抓不到
4F:推 jbee: sed -i '/disable/{s/yes/no/g}' t.sh 04/25 14:38
谢谢4 & 5楼,这种写法真是清楚又好懂
5F:推 hijkxyzuw: sed -i '/disable/ s/yes/no/g' t.sh 04/26 15:49
6F:推 rickieyang: 为什麽全部人给的 sed 都加了 g ... 04/26 20:34
7F:推 holishing: 这样有比较global (? 04/26 22:41
8F:推 Xunion: 同6楼 04/27 15:04
9F:→ Xunion: 5楼才对 04/27 15:05
※ 编辑: tutu (140.110.200.41), 04/29/2019 11:00:36
10F:→ lantw44: 加 g 应该就是习惯吧,没加只会取代一行中的第一项 04/29 22:59
11F:推 rickieyang: 我知道只会取代一项, 所以才问原始需求加 g 要干嘛... 04/30 01:36
12F:推 holishing: 可能没看图/觉得用在其他类似地方也通吧? 不知道XD 04/30 03:37