全球主机交流论坛

标题: sed 行首加# 然后在下面一行添加.... [打印本页]

作者: KDE    时间: 2021-7-19 21:09
标题: sed 行首加# 然后在下面一行添加....

cat /usr/lib/systemd/system/shadowsocks-libev.service
  1. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
复制代码


变成
cat /usr/lib/systemd/system/shadowsocks-libev.service
  1. #ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  2. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"
复制代码


试过 结果不对就上来发帖了 请大佬们赐教...
sed -i 's\/ExecStart=\/usr\/local\/bin\/ss-server -c "$CONFFILE" $DAEMON_ARGS"\//ExecStart=\/usr\/local\/bin\/ss-server -c "$CONFFILE"/g'
作者: h20    时间: 2021-7-19 21:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: G.K.D    时间: 2021-7-19 21:17
本帖最后由 G.K.D 于 2021-7-19 21:35 编辑

如果是新手的话,没必要追求写成一行命令。
可以分开为两个命令(一个是在首行前面加上 # ,一个是新文本插入第二行~),这样更方便理解。
作者: KDE    时间: 2021-7-19 21:21
G.K.D 发表于 2021-7-19 21:17
你没必要写成一行命令,你可以分开为两个命令,一个是在首行前面加上 # ,一个是新文本插入第二行~ ...

sed -i 's/^ExecStart*/#ExecStart*/g' test
sed -i '/^#ExecStart*/a ExecStart=\/usr\/local\/bin\/ss-server -c "$CONFFILE"' test

试了上面两个,可以了,但是想知道还有没优化空间啊???
作者: G.K.D    时间: 2021-7-19 21:25
本帖最后由 G.K.D 于 2021-7-19 22:24 编辑
KDE 发表于 2021-7-19 21:21
sed -i 's/^ExecStart*/#ExecStart*/g' test
sed -i '/^#ExecStart*/a ExecStart=\/usr\/local\/bin\/ss- ...


看错需求了,楼下我又写了段新的。。。

我刚才测试了下,给你写了条命令,其实也可以合起来~

用来测试的文件内容:
  1. cat 1.txt

  2. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  3. 2
  4. 3
复制代码

先把第一行行首插入 # 文本,然后再向第一行后面插入新文本,结果是:
  1. sed -i '1 s/^/#/;1 a\ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"' 1.txt

  2. #ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  3. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"
  4. 2
  5. 3
复制代码

你把上面代码里的 1.txt 改成你自己的文件名即可。

顺便帮你讲解一下命令吧:
  1. sed :不用解释了吧
  2. -i :修改模式,不加这个就只是输出预览结果,不会写入修改文件
  3. '1 :代表第一行
  4. s/^/#/ :把行首 ^ 替换为 #(如果是行尾那就是 $ 符号,因为就一个所以没必要多此一举加上 g)
  5. ; :分开两个 sed 命令
  6. 1 :代表第一行
  7. a\ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"' : a 代表向该行后面插入(i 则代表向该行前面插入),\ 后面的就是插入内容
  8. 1.txt :这个是读入的文件
复制代码


「自选 IP/优选 IP」测试 Cloudflare 延迟和速度,获取最快 IPv4/IPv6~
https://github.com/XIU2/CloudflareSpeedTest(⭐2k

作者: llyang    时间: 2021-7-19 21:28
看起来这行有问题
sed -i 's/^ExecStart*/#ExecStart*/g' test

需要写全,需要 /c
另外。/g没有必要

没有测试,我是张嘴就来
作者: KDE    时间: 2021-7-19 21:39
本帖最后由 KDE 于 2021-7-19 21:48 编辑
G.K.D 发表于 2021-7-19 21:25
我刚才测试了下,给你写了条命令,其实也可以合起来~

用来测试的文件内容:



大佬牛逼....

另外大佬请问下,有什么办法可以搞自动化吗?怕后期行数会改变...

  1. wget --no-check-certificate -O /usr/lib/systemd/system/shadowsocks-libev.service https://raw.githubusercontent.com/shadowsocks/shadowsocks-libev/master/rpm/SOURCES/systemd/shadowsocks-libev.service
复制代码
  1. sed -i '22 s/^/#/;22 a\ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"' /usr/lib/systemd/system/shadowsocks-libev.service
复制代码




作者: G.K.D    时间: 2021-7-19 22:02
本帖最后由 G.K.D 于 2021-7-19 22:04 编辑
KDE 发表于 2021-7-19 21:39
大佬牛逼....

另外大佬请问下,有什么办法可以搞自动化吗?怕后期行数会改变...


比较尴尬,看错了~

原文件:
  1. cat 1.txt

  2. 1
  3. 2
  4. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  5. 3
  6. 4
复制代码
加上 # 号:
  1. sed -i 's/^ExecStart=/#ExecStart=/g' 1.txt

  2. 1
  3. 2
  4. #ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  5. 3
  6. 4
复制代码
在下一行插入新文本:
  1. sed -i '/^#ExecStart=/a \ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"' 1.txt

  2. 1
  3. 2
  4. #ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  5. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"
  6. 3
  7. 4
复制代码
当然他们依然可以组合成一条命令~
  1. sed -i 's/^ExecStart=/#ExecStart=/g;/^#ExecStart=/a \ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"' 1.txt

  2. 1
  3. 2
  4. #ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  5. ExecStart=/usr/local/bin/ss-server -c "$CONFFILE"
  6. 3
  7. 4
复制代码
记得替换示例代码命令中的 1.txt


「自选 IP/优选 IP」测试 Cloudflare 延迟和速度,获取最快 IPv4/IPv6~
https://github.com/XIU2/CloudflareSpeedTest(⭐2k





欢迎光临 全球主机交流论坛 (https://hostloc.gdisk.cf/) Powered by Discuz! X3.4