如何使用sed/awk在指定行后插入带正确换行格式的内容
在数组头部插入元素的Shell命令实现
原始文件与需求
原始文件内容如下:
name = [ "victor", "linda", "harris", "sandy" ]
需要通过sed/awk命令在数组第一个元素前插入新条目"NEW INPUT HERE",,保持原有缩进格式,最终输出效果:
name = [ "NEW INPUT HERE", "victor", "linda", "harris", "sandy" ]
之前尝试的命令存在换行异常、格式不符的问题,可直接使用下面两种方案实现。
方案1:sed命令实现
直接匹配数组开头的name = [行,在该行后追加新元素即可,不需要手动拼接换行符,sed会自动处理换行逻辑,不会出现格式错乱:
# Linux环境(GNU sed)直接执行,预览输出效果 sed '/name = \[/a\ "NEW INPUT HERE",' filename # 需要直接修改原文件的话加-i参数 sed -i '/name = \[/a\ "NEW INPUT HERE",' filename
如果是macOS自带的BSD sed,使用如下写法:
sed '/name = \[/a\ "NEW INPUT HERE", ' filename
之前手动拼接$'\n'的写法容易因为shell转义问题导致换行失效,用sed自带的a\追加命令语法更稳定,新行前面的4个空格和原有元素缩进完全一致。
方案2:awk命令实现
逐行遍历文件内容,匹配到数组开头行时,先打印当前行,再打印带正确缩进的新元素行,其余行正常输出即可:
# 预览输出效果 awk '/name = \[/{print; print " \"NEW INPUT HERE\","; next}1' filename # 保存修改到文件 awk '/name = \[/{print; print " \"NEW INPUT HERE\","; next}1' filename > temp_file && mv temp_file filename
内容的提问来源于stack exchange,提问作者Springhills
相关产品推荐
相关产品推荐

