![](/img/trans.png)
[英]How to append lines that match two patterns to the previous line in a file?
[英]Match a line and remove it and append lines below it in Unix shell
我有一个包含以下行的文件
<datasource file name>: {"project": "<PROJECT NAME>", "db_config": "<DATASOURCE NAME>", "schedules": ["DAILY/INCREMENTAL"], "groups": {"All Users":"None","Viewer":"ViewerAccessType","DIY":"DIYAccessType"}}
我正在考虑使用变量
<PROJECT NAME> = project1
<DATASOURCE NAME> = Default
进而
我想删除此行并在文件中的相同位置添加以下行
view1: {"project": "project1", "db_config": "Default", "schedules": ["DAILY/INCREMENTAL"],"groups": {"All Users":"None"}}
view2: {"project": "project1", "db_config": "Default", "schedules": ["DAILY/INCREMENTAL"],"groups": {"All Users":"None"}}
有人可以建议吗?
我试过
sed -ir "s|^<datasource file name>:.*|view1: $datasource_var|" $SITE_CONFIG_PROPERTIES_FILE
但它只替换了一行如何像上面那样添加更多行?
不确定我是否了解所有细节,但您可以使用sed
append ( a
) 和删除 ( d
) 命令而不是替换 ( s
)。 GNU sed
:
sed '/^<datasource file name>:/{a\
view1: {"project": "project1"..."All Users":"None"}}
;a\
view2: {"project": "project1"..."All Users":"None"}}
;d;}' file.txt
注意:即使使用 macOS 附带的过时 BSD sed
,它似乎也能正常工作(至少在您的示例中如此)。
您也可以使用awk
。 GNU awk
:
awk -v a='view1: {"project": "project1"..."All Users":"None"}}' \
-v b='view2: {"project": "project1"..."All Users":"None"}}' \
'/^<datasource file name>:/ {print a; print b; next} {print}' file.txt
注意:与sed
相同的评论,它似乎适用于 macOS 附带的过时 BSD awk
的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.