2017-01-15 12 views
0

私はカスタム辞書を使用して翻訳する必要があるファイルがたくさんあります。各ファイルには、使用する辞書を示す行が含まれています。ここでは例です:上記のファイルで複数の辞書を使用してテキストファイル内の単語を変更する

*A: 
! 
=1 
*>A_intro 
1r 
=2 
1r 
=3 
1r 
=4 
1r 
=5 
2A:maj 
*- 

*A:dictAを使用することを示します。

私はこの部分には、次の構文を使用して簡単に変換することができます。

sed -f dictA < myfile 

私の問題は、いくつかのファイルがテキストで辞書半分の方法の変更を必要とすることです。例:

*B: 
1B:maj 
2E:maj/5 
2B:maj 
2E:maj/5 
*C: 
2F:maj/5 
2C:maj 
2F:maj/5 
2C:maj 
*- 

翻訳プロセスを自動化するスクリプトを作成したいと思います。この例では、スクリプトに最初の行を読み込み、dictBを選択し、*C:となるまでそれぞれの行を翻訳するにはdictBを使用し、dictCを選択してください。

+2

私はこのようなものから始めることを提案します: 'while IFS = read -r line; echo "$ lineで何かする";完了<ファイル名> – Cyrus

答えて

0

ありがとう@Cyrus。それは便利でした。ここで私は何をやったのですか。

私はあなたの "辞書" は本当にこのような検索と置換 sedスクリプト、していると仮定し
#!/bin/sh 
key="sedDictNull.txt" 
while read -r line || [ -n "$line" ] ## Makes sure that the last line is read. See http://stackoverflow.com/questions/12916352/shell-script-read-missing-last-line 
do 
     if [[ $line =~ ^\*[Aa]:$ ]] 
     then 
     key="sedDictA.txt" 
     elif [[ $line =~ ^\*[Aa]#:$ ]] 
     then 
     key="sedDictA#.txt" 
     fi 
     echo "$line" | sed -f $key 
done < $1 
0

/^\*B:/, /^\*[^B]/ { 
    s/1B/whatever/; 
    s/2B/something/; 
} 
/^\*C:/, /^\*[^C]/ { 
    s/2C/nothing/; 
    s/2B/something/; 
} 

s/2C/nothing/; 
s/2B/something/; 

あなたはこのように、セクションにこれらのスクリプトを再編成することができそして、もちろん、あなたはその場でそれを行うことができます:

for dict in B C 
    do echo "/^\\*$dict:/, /^\\*[^$dict]/ {" 
    cat dict.$dict 
    echo "}" 
done | sed -f- dict.in 
関連する問題