sed搜索/替换为通配符

时间:2018-01-23 14:46:44

标签: bash sed

我正在尝试使用sed在一组文本文件中进行搜索/替换。文件包含如下行:

$table->char('widget_guid', 36)->index('widget_guid');

我希望将char替换为guid并删除, 36,因此生成的行看起来像

$table->guid('widget_guid')->index('widget_guid');

我的努力,

sed -i 's/char(\('.*'), 36\)/guid\(\1\)/g' *create*.php

但没有任何东西被替换

我使用regexp101.com对表达式进行了测试,结果表明它应该使用正确的捕获组来获取正确的块

关于我可能做错什么的任何建议?以及如何实现我想要的目标?

2 个答案:

答案 0 :(得分:2)

您可以使用此sed

sed -E 's/char(\([^,]*)[^)]*/guid\1/' file

$table->guid('widget_guid')->index('widget_guid');

<强>解释

  • char:匹配字符串char
  • (:启动捕获组#1
    • \(:匹配文字(
    • [^,]*:匹配任何非逗号字符的0或更多
  • ):结束捕获组#1
  • [^)]*:匹配0个或更多不是)
  • 的字符
  • -Esed
  • 中启用扩展正则表达式(ERE)而不是basix正则表达式(BRE)
  • \1是捕获组#1
  • 的反向引用

答案 1 :(得分:0)

关注sed可能对您有帮助。

sed  's/char/guid/;s/, [0-9]*//'  Input_file

输出如下。

$table->guid('widget_guid')->index('widget_guid');