繁体   English   中英

在Unix shell中匹配一行并去掉它和它下面的append行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM