使用sed在单引号之间提取字符串

时间:2013-06-25 07:37:21

标签: regex linux sed grep

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

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

答案 1 :(得分:1)

你可以试试这个:

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

答案 2 :(得分:0)

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

你必须逃避他们进行分组,所以改变正则表达式以逃避内部的,例如:

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