2013-06-25 3 views
2

나는 수천 개의 델파이 파일 (.pas)을 가지고 있으며 그것들에서 텍스트를 추출해야합니다.sed로 작은 따옴표 사이에 문자열을 추출하십시오.

필자가 필요로하는 텍스트는 작은 따옴표 (파스칼 문자열) 사이에 있으며, 특정 함수에서 호출 된 문자열 만 필요합니다. 예 : my_function ('필요한 문자열입니다.')

find 및 grep을 사용하여 함수에 나타나는 모든 줄을 추출하고 텍스트 파일에 추가했지만 문자열을 추출 할 수 없습니다.

저는이 문자열을 추출 할 정규식을 찾고 있었지만이 방법을 알지 못합니다.

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

을하지만 (나는 ... 정규식 전문가가 아니에요) 작동하지 않습니다 :이 함께 노력하고있어.

도와 드릴까요?

답변

3

:

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

이 작업을 시도 할 수 있습니다 :

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

그것은 '아무튼 전혀 제대로 작동하지 않습니다. "my_function ('이 문자열이 필요합니다'); // 아름다운 주석"출력은 "('이 문자열이 필요합니다'); // 아름다운 주석"... –

+0

@marc 카사 나의 나쁜. 수정됩니다. –

0

귀하의 솔루션은 바로 이곳에서 괄호를 탈출하지 않습니다. 에서는 특수한 메타 문자가 아니므로 리터럴과 일치합니다.

당신은 그룹화 할을 탈출과 같이, 내부 사람을 탈출하는 정규 표현식을 변경해야합니다 : 이것은 (나오지 GNU)을 당신을 위해 작동 할 수

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