我正在尝试使用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对表达式进行了测试,结果表明它应该使用正确的捕获组来获取正确的块
关于我可能做错什么的任何建议?以及如何实现我想要的目标?
答案 0 :(得分:2)
您可以使用此sed
:
sed -E 's/char(\([^,]*)[^)]*/guid\1/' file
$table->guid('widget_guid')->index('widget_guid');
<强>解释强>
char
:匹配字符串char
(
:启动捕获组#1
\(
:匹配文字(
[^,]*
:匹配任何非逗号字符的0或更多)
:结束捕获组#1 [^)]*
:匹配0个或更多不是)
-E
在sed
\1
是捕获组#1 答案 1 :(得分:0)
关注sed
可能对您有帮助。
sed 's/char/guid/;s/, [0-9]*//' Input_file
输出如下。
$table->guid('widget_guid')->index('widget_guid');