sed正则表达式切割字符串

时间:2017-11-10 10:07:58

标签: php regex bash sed iconv

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

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在这种情况下是否是正确的解决方案

之前有人遇到类似的问题吗?

5 个答案:

答案 0 :(得分:1)

您可以使用此sed命令:

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

将你的php变量提取到\1/2是该行的剩余部分(您发布的示例中的;

答案 1 :(得分:0)

使用输出尝试此cut语句。

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

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

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

答案 3 :(得分:0)

试试这个sed:

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

这将只提取变量。

答案 4 :(得分:0)

使用grep

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