sed 正则表达式剪切字符串

sed regex cut string

我有大约 200 个 php 文件,其中包含一些 iconv() 函数, 像这样:

iconv('GB2312','UTF-8',$aRow[$aColumns[3]])
iconv('GB2312','UTF-8',$rs1['supplier']);
iconv('GB2312','UTF-8',$aRow[ $aColumns[$i] ]);

我不知道在不触及变量的情况下以批处理模式删除 iconv('GB2312','UTF-8', 和最终 ) 的最佳方法是什么。

这个 RegEx 可以匹配我的情况,但我不知道如何将它与 sed 一起使用: ^(iconv\(\'GB2312\'\,\'UTF-8\'\,)+|(\))

而且我也不确定 sed 在这种情况下是否是正确的解决方案

有人遇到过类似的问题吗?

您可以使用这个 sed 命令:

 sed -i "s/iconv('GB2312','UTF-8',\([^)]*\))\(.*\)//" file

这会将您的 php 变量提取到 </code> 中。 <code>/2 是该行的剩余部分(您发布的示例中的 ;

用输出试试这个 cut 语句。

cat file|cut -d, -f3|tr -d ');'

这可能适合您 (GNU sed):

sed 's/iconv('\''GB2312'\'','\''UTF-8'\'',\([^)]*\))//g' file

使用示例字符串作为模板,将 ' 替换为 '\'' 并将变量保留为第二个 , 之后的任何字符,这不是结束 )。此变量包含在引号 (...) 中,即 \(...\) 可以作为后向引用传输到替换命令的 RHS。

试试这个 sed:

cat file | sed 's/iconv(.*,.*,\(.*\)).*//g'

这将只提取变量。

用 grep

grep -o '$[^)]*' infile