gpt4 book ai didi

bash - 全局匹配和替换多行文本

转载 作者:行者123 更新时间:2023-12-04 18:57:31 24 4
gpt4 key购买 nike

我正在处理一个包含许多文件(100+)的项目。

我想更新的每个页面上都有两个 FE 属性。例如,

                property1: {
type: String,
notify: true,
value: "PropOne"
},
property2: {
type: String,
notify: true,
value: "PropTwo"
},

我可以单独对“PropOne”和“Prop2”进行 grep,但我宁愿匹配整个属性对象以获得更高的准确性。

有没有办法使用 GREP 之类的方法来查找和更新值?

编辑:预期输出将是:
                property1: {
type: String,
notify: true,
value: "this is new PropOne"
},
property2: {
type: String,
notify: true,
value: "this is new PropTwo"
},

最佳答案

$ cat old
property1: {
type: String,
notify: true,
value: "PropOne"
},
property2: {
type: String,
notify: true,
value: "PropTwo"
},

$ cat new
property1: {
type: String,
notify: true,
value: "this is new PropOne"
},
property2: {
type: String,
notify: true,
value: "this is new PropTwo"
},

.
$ cat file
lines before
the target
property1: {
type: String,
notify: true,
value: "PropOne"
},
property2: {
type: String,
notify: true,
value: "PropTwo"
},
lines after
the target

$ awk -v RS='^$' -v ORS= '
ARGIND==1 { old=$0; next }
ARGIND==2 { new=$0; next }
s=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) }
{ print }
' old new file
lines before
the target
property1: {
type: String,
notify: true,
value: "this is new PropOne"
},
property2: {
type: String,
notify: true,
value: "this is new PropTwo"
},
lines after
the target
$

以上将 GNU awk 用于多字符 RS 和 ARGIND。如有必要,不难提出 POSIX 版本。它使用字符串比较和替换,因此文件中的正则表达式和/或反向引用元字符将被视为文字,因此不需要任何特殊考虑(例如,如果您尝试使用 sed 或任何其他基于正则表达式的方法) .

关于bash - 全局匹配和替换多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com