【问题标题】:sed regex cut stringsed 正则表达式剪切字符串
【发布时间】:2017-11-10 10:07:58
【问题描述】:

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

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

【问题讨论】:

  • 基于token_get_all编写一个PHP脚本(参见PHP手册并尝试一下)。

标签: php regex bash sed iconv


【解决方案1】:

你可以使用这个sed 命令:

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

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

【讨论】:

    【解决方案2】:

    试试这个cut 语句的输出。

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

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

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

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

      【讨论】:

        【解决方案4】:

        试试这个 sed:

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

        这将只提取变量。

        【讨论】:

          【解决方案5】:

          使用 grep

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 2016-07-08
            • 2013-07-24
            • 2016-07-05
            • 1970-01-01
            • 2012-02-21
            • 1970-01-01
            相关资源
            最近更新 更多