2013-07-26 8 views
0

교체를 위해 내가 아래와 같이 여러 줄의 파일을 사용할 : 나는이 라인을 변경하려면나오지도 - 두 문자열 사이에 텍스트를 찾아

townValue.put("Aachen");  
townValue.put("Aalen");    
townValue.put("Ahlen");    
townValue.put("Arnsberg");   
townValue.put("Aschaffenburg");   
townValue.put("Augsburg"); 

:

townValue.put("Aalen", "Aalen");    
townValue.put("Ahlen", "Ahlen");    
townValue.put("Arnsberg", "Arnsberg");   
townValue.put("Aschaffenburg", "Aschaffenburg");   
townValue.put("Augsburg", "Augsburg"); 

어떻게 할 수 이것을 sed 또는 awk로 달성하십시오. 이것은 특별한 것으로 보입니다 & 작업을 대체, 그물에 아직 찾을 수 없습니다. 도움을

감사

답변

6

사용 sed -e 's/"[^"]*"/&, &/' :

$ cat 1 
townValue.put("Aachen");  
townValue.put("Aalen");    
townValue.put("Ahlen");    
townValue.put("Arnsberg");   
townValue.put("Aschaffenburg");   
townValue.put("Augsburg"); 
$ sed -e 's/"[^"]*"/&, &/' 1 
townValue.put("Aachen", "Aachen");  
townValue.put("Aalen", "Aalen");    
townValue.put("Ahlen", "Ahlen");    
townValue.put("Arnsberg", "Arnsberg");   
townValue.put("Aschaffenburg", "Aschaffenburg");   
townValue.put("Augsburg", "Augsburg"); 

나오지도 (1)에 따르면에 대해 정규 표현식과 일치하는

S/정규 표현식/교체/

시도 패턴 공간. 성공한 경우 대체와 일치하는 부분을 교체하십시오. 치환은 일치하는 패턴 공간의 부분을 참조하는 특수 문자 &을 포함 할 수 있으며 정규 표현식에서 일치하는 하위 표현식을 참조하기 위해 \ 1에서 \ 9를 이스케이프 처리합니다.

에 대한
+0

' ". *"'이면 충분합니다. '[^ "]'로 더 잘 보이지만, 실제로'''쌍이 있다면, 이것도 작동하지 않습니다. 첫 번째''... ''를 대체 할 것입니다. 한 OP가 대체하려고합니다. :) – Kent

+0

대단히 감사합니다! 이것은 나를 위해 작동합니다. – codyLine

1

코드, 명령 줄에서 따옴표의 많은 수의 I 스크립트 사용을 권장하기 때문에 :

awk -f script file 
  • 스크립트

    BEGIN {FS=OFS="\""} 
    $3=", \""$2"\""$3 
    

 
$ cat file 
townValue.put("Aachen"); 
townValue.put("Aalen"); 
townValue.put("Ahlen"); 
townValue.put("Arnsberg"); 
townValue.put("Aschaffenburg"); 
townValue.put("Augsburg"); 

$ awk -f script file 
townValue.put("Aachen", "Aachen"); 
townValue.put("Aalen", "Aalen"); 
townValue.put("Ahlen", "Ahlen"); 
townValue.put("Arnsberg", "Arnsberg"); 
townValue.put("Aschaffenburg", "Aschaffenburg"); 
townValue.put("Augsburg", "Augsburg"); 
+0

불행히도, 그것은 나를 위해 작동하지 않았다. 나는 이것을 얻는다 :'townValue.put ("Aachen"); , "" ' – codyLine

+0

@codyLine이 작품은 나를 위해 작동합니다. 그러나 커맨드 라인에는 큰 따옴표가 많이 있습니다. 작은 스크립트 파일로 작업하는 것이 좋습니다. 나는 편집을했다. – captcha

+0

스크립트로 다시 시도한 결과는 다음과 같습니다. '~ $ awk -F "-v OFS ="-f awk-script townList.txt townValue.put ("Aachen"); , "" townValue.put ("Aalen"); , "" townValue.put ("Ahlen"); , "" townValue.put ("Arnsberg"); , "":--( – codyLine

관련 문제