【问题标题】:Extract string between single quotes with sed使用 sed 提取单引号之间的字符串
【发布时间】:2013-06-25 07:37:21
【问题描述】:

我有一千个 Delphi 文件 (.pas),我需要从中提取文本。

我需要的文本在单引号(Pascal 字符串)之间,我只需要从特定函数调用的字符串。例如:my_function('这是我需要的字符串')

我已使用 find 和 grep 提取了出现该函数的所有行并添加到文本文件中,但我无法提取字符串。

我一直在互联网上寻找一个正则表达式来提取这些字符串,但我不知道该怎么做。我正在尝试这个:

sed "s/.*my_function\('(.*)'\).*/\1/" all_the_strings.txt > my_out_file.txt

但它不起作用(我不是正则表达式的专家......)。

你能帮我解决这个问题吗?

【问题讨论】:

    标签: regex linux sed grep


    【解决方案1】:

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

    sed -nr "s/.*my_function\('([^']*)'\).*/\1/p" all_the_strings.txt > my_out_file.txt
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      sed 's/.*my_function(.\(.*\).).*/\1/;'
      

      【讨论】:

      • 它根本无法正常工作。如果我有“my_function('This is the string I need'); // 一个漂亮的评论”,输出是“('This is the string I need'); // 一个漂亮的评论”...
      【解决方案3】:

      您的解决方案不会在正确的位置转义括号。在 中,它们不是特殊的元字符,因此它们匹配文字。

      您必须转义它们才能进行分组,因此更改正则表达式以转义内部的,例如:

      sed "s/.*my_function('\(.*\)').*/\1/" all_the_strings.txt > my_out_file.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 2012-09-05
        相关资源
        最近更新 更多