Linux sed 命令添加多行文本 写在一行命令里

TL;DR
sed '/要搜索的内容/ a 第1行\\n第2行\\n第3行'

kejilion的脚本, 考虑使用者有可能在墙内, 或者是纯ipv6的网络环境, 
1) 在Docker包管理器时会使用国内的源, 
2) 在获取 github 资源时, 会加上 ghproxy.
脚本会根据一些条件来帮助使用者进行判断, 是否应该使用这些特殊处理.

但是, 使用者的环境千奇百怪, 脚本的判断并不一定是最优的处理. 那么群里就会冒一条消息. 唉呀, 脚本卡住啦, 脚本出错啦, 求求大神快来解救我呀.

如果我们不想等"大神"来救, 那么我们可以自己决定是否要做这些特殊处理.

思路和以前类似, 也是用sed修改文本流的内容, 再灌到bash里面去执行.

我们要在文本中找到
quanju_canshu() {
然后在下面添加3行
zhushi=0
gh_proxy="https://gh.kejilion.pro/"
return
当然了, 根据你的需求, 这2个参数的值是可以修改的. 比如, zhushi=1, 或者 gh_proxy=""

到此为止, 和以前都差不多, 写一篇文出来太水了.

我想写文的原因是, 如何使用sed添加多行文本, 写在一行命令里.

要用sed添加多行文本, 我找到的资料都是写成多行命令的, 我的意思是这样的:

man sed 查出来的官方帮助文档

a \ - append - 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用\续行

但是, 如果我要基于 bash <(...) 的模式修改, 我想还是保持一行命令的形式, 应该怎么写呢?

又经过一些搜索和尝试, 在 sed v4.9 版本下, 我实践成功的写法是这样的
sed '/要搜索的内容/ a 第1行\\n第2行\\n第3行'
其中 /***/ 就是 搜索并定位 的功能, a 就是在下1行添加文本  的功能, \\n 实现了换行符.


回到我们的原始问题.
bash <( curl -L "https://gh.kejilion.pro/https://raw.githubusercontent.com/kejilion/sh/refs/heads/main/kejilion.sh" | sed '/quanju_canshu() {/ a zhushi=0\\ngh_proxy="https://gh.kejilion.pro/"\\nreturn' )


评论

The Hot3 in Last 30 Days