Bash sed搜索/替换为通配符
我正在尝试使用sed在一组文本文件中执行搜索/替换。其中文件包含以下行:Bash sed搜索/替换为通配符,bash,sed,Bash,Sed,我正在尝试使用sed在一组文本文件中执行搜索/替换。其中文件包含以下行: $table->char('widget_guid', 36)->index('widget_guid'); 我希望用guid替换char,并去掉,36,因此生成的行如下所示 $table->guid('widget_guid')->index('widget_guid'); 我的努力 sed -i 's/char(\('.*'), 36\)/guid\(\1\)/g' *create*.php
$table->char('widget_guid', 36)->index('widget_guid');
我希望用guid
替换char
,并去掉,36
,因此生成的行如下所示
$table->guid('widget_guid')->index('widget_guid');
我的努力
sed -i 's/char(\('.*'), 36\)/guid\(\1\)/g' *create*.php
但没有任何东西被取代
我已经使用regexp101.com对表达式进行了测试,结果表明它应该使用正确的捕获组拾取正确的块
关于我可能做错了什么,有什么建议吗?如何实现我想要的?您可以使用此
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
sed
可能会在同样的情况下帮助您
sed 's/char/guid/;s/, [0-9]*//' Input_file
输出如下
$table->guid('widget_guid')->index('widget_guid');
建议:如果您正在使用在线正则表达式帮助程序,请仅将其用于各自的语言。。。sed的正则表达式语法和功能与编程语言中的不同。。不同的sed版本(GNU/osx/etc)本身也有差异。。另见