bash - 使用 sed 将文件中的一行替换为来自标准输入或 HEREDOC 的多行
问题描述
我想用多行替换文件中的一行。我知道我可以\n
在sed
替换中使用,但这很丑陋。我希望听到 HEARDOCs。
所以我可以这样做以用多行替换该行:
$ cat sedtest
DINGO=bingo
$ sed -i -e "s/^DINGO.*$/# added by $(whoami) on $(date)\nDINGO=howdy/" sedtest
$ cat sedtest
# added by user on Sun Feb 3 08:55:44 EST 2019
DINGO=howdy
在命令中,我想将替换放在新行中,以便更容易阅读/理解。到目前为止,当我想向文件添加新行时,我一直在使用 HEREDOC:
CAT << EOF | sudo tee -a file1 file2 file3
line one
line two
line three
EOF
这对于追加/添加效果很好。是否可以做类似的事情,而是使用输出作为替代品,sed
或者是否有其他方法可以做我正在寻找的事情?
解决方案
这是你想要做的吗?
$ awk 'NR==FNR{new=(NR>1?new ORS:"") $0;next} $0=="DINGO=bingo"{$0=new} 1' - file <<!
# added by $(whoami) on $(date)
DINGO=howdy
!
# added by user on Sun, Feb 3, 2019 8:50:41 AM
DINGO=howdy
请注意,上面使用的是文字字符串操作,因此它适用于旧字符串或新字符串中的任何字符,这与您的 sed 脚本不同,如果给定/
s 或任何 ERE 正则表达式字符或捕获组或反向引用或...在输入(有关详细信息,请参阅是否可以使用 sed 可靠地转义正则表达式元字符)。
推荐阅读
- webpack - TailwindCSS JIT Webpack HMR 不断用 themekit 重新编译
- angular - 在命名插座中传递参数不起作用
- c - 在 MPI 中按顺序运行 for 循环的某些部分
- .net - 为避免使用 API,我不能只写入 Google Drive 文件夹吗?我如何找到它?
- docker - Docker:traefik 反向代理 + 自己的 dockerfile = 坏网关
- python - 为什么我的计算器 GUI 单元测试显示 AssertionError?
- scipy - sympy中符号和的复杂度
- react-native - 登录后如何隐藏按钮导航(React Native)
- material-ui - 用于 groupBy 标题的 Material UI 自动完成自定义 CSS
- javascript - 如何在字符串中获取选定的多复选框值