Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed搜索/替换为通配符_Bash_Sed - Fatal编程技术网

Bash 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

我正在尝试使用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
但没有任何东西被取代

我已经使用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)本身也有差异。。另见