gpt4 book ai didi

unix - 使用 sed 替换模式

转载 作者:行者123 更新时间:2023-12-01 13:15:52 24 4
gpt4 key购买 nike

我想替换类似这样的模式:

make_pair(obj1.get<1>(), obj2.get<2>());

到:

make_pair(get<1>(obj1), get<2>(obj2));

试过:sed -i'' -e 's/(\(.*\)./get<1>(\1)/g' file_name

但是得到错误的结果。

如何在模式前捕获标记?

请注意,它也应该与 make_pair(obj1[I].get<1>(), obj2[I].get<2>()); 一起使用字符串。

最佳答案

你可以使用

sed -i'' -E 's/([[:alnum:]]*(\[[[:alnum:]]*])*)\.get(<[^><]*>)\(\)/get\3(\1)/g'  filename

POSIX ERE 模式详细信息

  • ([[:alnum:]]*(\[[[:alnum:]]*])*) - 第 1 组:
    • [[:alnum:]]* - 0 个或多个字母数字字符
    • (\[[[:alnum:]]*])* - 0次或多次重复
      • \[ - 一个 [字符
      • [[:alnum:]]* - 0 个或多个字母数字字符
      • ] - 一个 ]字符。
  • \.get - 一个 .get子串
  • (<[^><]*>) - 第 3 组:一个 < , 然后是 < 以外的 0+ 个字符和 >然后 >
  • \(\) - 一对空括号 () .

Online demo :

s="make_pair(obj1[I].get<1>(), obj2[I].get<2>());"
sed -E 's/([[:alnum:]]*(\[[[:alnum:]]*])*)\.get(<[^><]*>)\(\)/get\3(\1)/g' <<< "$s"
# => make_pair(get<1>(obj1[I]), get<2>(obj2[I]));

关于unix - 使用 sed 替换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137097/

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