2015-02-02 6 views
0

텍스트 파일의 특정 단어를 바꾸길 원합니다. 특히 영어 철자가있는 단어의 영어 철자. 나는 주문하는 철자의 두 배열이 같은 즉sed awk 또는 grep로 단어 바꾸기

list_1 = [ '아늑한', '캐럿', '확인']
list_2 = [ '아늑한', '캐럿', '확인']

list_1의 요소를 텍스트 파일에서 검색하고 list_2의 요소를 대체 할 수 있습니까?

+4

예, awk를 사용하십시오. 아놀드 로빈스 (Arnold Robbins)의 Effective Awk Programming (효과적인 Awk Programming)을 아직받지 못했다면 스크립트를 작성한 후에 궁금한 점이 있으면 알려주십시오. –

+1

"나는 할 수 ... ...?" 나는 몰라. 너 가능 하냐? 그래도 가능하다고 확신합니다. – twalberg

+0

이 스레드를보세요 : [링크] (http://stackoverflow.com/questions/7198098/what-is-an-efficient-way-to-replace-list-of-strings-with-another-list-in- 유닉스 - 파이) – Aman

답변

2

이 방법은 사용자가 GNU sed에 액세스 할 수 있다고 가정합니다. 이 파일 생성

$ cat script.sh 
list_1=('cosy' 'carat' 'cheque') 
list_2=('cozy' 'karat' 'check') 
for i in "${!list_1[@]}" 
do 
    echo "s/\\b${list_1[i]}\\b/${list_2[i]}/g" 
done >spelling.sed 

:

먼저 할 일은이 스크립트를 사용하여 해당 목록에서 정보를 얻을 지금

$ cat spelling.sed 
s/\bcosy\b/cozy/g 
s/\bcarat\b/karat/g 
s/\bcheque\b/check/g 

을, 우리는 철자를 변경하려면 해당 파일을 사용할 수 있습니다 . 예 :

$ echo "Decosy makes a cosy cheque." | sed -f spelling.sed 
Decosy makes a cozy check. 

Decosy의 맞춤법은 변경되지 않습니다. 이것은 단어 경계를 나타내는 GNU 확장자 \b을 사용하기 때문입니다. 이 방법으로 전체 단어 만 변경됩니다.

+0

정말 고마워요. 정말 감사. –