2012-03-29 2 views
1

형식이 큰 큰 텍스트 파일이 있습니다. 나는 영어 단어의 마지막 문자 'E'것을 제외하고 스페인어 단어와 동일한 단어를 찾을 수 있습니다해야 할 일은2 개의 정규식을 특정 기준에 일치 시키시겠습니까?

english word: spanish equivalent words here; 
english word: spanish equivalent words here; 
for about 1000 lines 

는 'O' 그래서 모든 영어 단어로 변경되었습니다 그 'e'로 끝나고, 스페인어와 동등한 철자는 철자가 정확히 일치합니다. 마지막 문자는 'e'가 아닌 'o'입니다. 내가 그 만든 감각을 희망 :

awk '/[^e:]*e:/ && /[^o;]*o;/ {print}' a.txt 

awk '/.*(e:|o;)/ {print}' a.txt 

:

예를 들어 나는 이것을 분리하는 것을 시도했다

thiswordE: spanishwordO; would be returned whilst 
thisword: spanishwordO; would not 
thisword: spanishword; would also not be returned 

단어를 만들어 줄게 어느 누구도 나를 위해 일해 오지 않았습니다. 누군가 나를 도울 수 있습니까? 또는 올바른 방향으로 나를 가리 키 시나요?

또한 특정 표현식을 찾기 위해 awk를 사용했다고 가정하면 변수를이 정규식과 동일하게 설정하는 방법은 무엇입니까? 예를 들어

나는 위의 파일

awk '/...:/' (so the last 3 letters before the :) 

에 대한 정규식을했고 나는 그렇게 얼마나 그 정규식의 결과에 해당하는 변수를 설정하고 싶다면?

나를 똑바로 대답 해 주시면 어떻게 작동하는지 설명해 주시겠습니까?

+0

숙제에 대한 질문이 있으면 반드시 사용해야하는 도구 또는 기술 (awk _or_ sed 또는 _any_ UNIX 필터)과 출력을 예상하는 방법에 대한 제한을 지정하십시오 (이 경우 텍스트 파일이 필요합니까 결과를 얻거나 화면에 단순히 인쇄 할 수있는 프로그램이 필요합니까? 파일의 현재 위치에서 수정하거나 사본을 만들어 다른 곳에 두는 것입니까?) –

답변

2

나는 이런 식으로 뭔가가 작동해야한다고 생각 (내가 그걸 모르는 무언가가 아니라면는 AWK에 대한 특별) :

([a-zA-Z]+)[eE]:\s*\1[oO];.* 

그것은 (스위치없이) 모든 경우를 수 있습니다, 그래서 그냥 대문자 곳을 제거 당신은 그 (것)들을 필요로하지 않으며 당신이 그 (것)들을 허용하고 싶지 않는 곳에. 마지막 .*은 세미콜론 다음에 개행하기 전의 항목을 허용합니다. \1 괄호에 포함 된 표현과 일치 있었는지에 대한 역 참조이고, \s는 당신이 더 많은 설명을 원한다면

그냥 물어 (줄 바꿈 포함)의 공백이다.

편집 : 이것은 일반적인 정규 표현식이며 awk는 역 참조를 지원하지 않으므로 awk와 호환되지 않습니다. awk가 아닌 sed에서의 사용에 대한 설명은 follow-up question by the OP을 참조하십시오.

+0

/1 백 참조는 정확히 내가 본 것과 같습니다. 찾고! 고맙습니다. 새로운 것을 찾아야합니다. – Max

+0

안녕하세요. "코드 기수"가 있습니다.이 코드를 얻으려면 확실하지 않습니다 ...하지만 코드 작업을 할 수없는 것 같습니다. 내가 "잘못된 뒤로 참조"오류가 발생했습니다, awk가 아주 잘 역 참조를 지원하지 않습니다로서 sed 내에서 귀하의 코드를 구현하려고 해요. – Max

+0

@Max Okie doke - 나는 어떤 의미에서 awk/sed 전문가가 아니기 때문에 (나는 과거에 적어도 한 번 이상 사용하는 것을 기억하는 것 같은 ...?), 나는 이것을하기 위해 역 참조가 필요 하겠지만 당신은 당신의 질문에 적어도 [tag : sed] 태그를 추가함으로써 도움을 줄 수있다. (당신은 하나 더 가질 여지가있다.) 아마도 당신이 시도한'sed' 것들로 당신의 질문에 다시 쓰거나 추가 할 수있다. 나는 항상 배우기 위해 노력하고 있으므로 답을 찾는 데 시간을 할애 할 것입니다. 그러나 제가 당신이라면, 계속 연구하고 연구 결과를 보여주기 위해 조사 결과를 업데이트하려고 노력할 것입니다. 다른 사람도 도움을 줄 수 있습니다. –

관련 문제