2016-01-23 42 views
0

我有兩個文件:
correct.txt使用兩個文件來查找/替換第三個文件

天空是藍色的
我喜歡吃蘋果

wrong.txt

天空是藍色的
我喜歡吃蘋果


這兩個文件中都有很多行。 現在,我想使用「wrong.txt」 中的搜索更正第三個文件,使用「correct.txt」進行更正。

我已經創建了兩個文件:

readarray -t correct_array < correct.txt 
readarray -t wrong_array < wrong.txt 

文件予以糾正是to_be_corrected.txt

這工作:

for c in "${correct_array[@]}" 
do 
    echo "$c" 
done 

我想這

for e in "${correct_array[@]}" 
do 
    sed -i.bak 's/$wrong_array[@]/$correct_array[@]/' to_be_corrected.txt 
done 

但這沒有奏效。
如何在陣列中使用sed

回答

0

對於您的sed命令,您正在使用單引號('),因此shell不會評估變量$wrong_array[@]$correct_array[@]。對變量嘗試雙引號和大括號。此外,您正在使用${correct_array[@]}的整個陣列。需要將配成一對,或許與一個索引:

for ((e=0; e<"${#correct_array[@]}"; ++e)); do 
    sed -i.bak "s/${wrong_array[$e]}/${correct_array[$e]}/" to_be_corrected.txt 
done 

在陣列的索引此迭代e${#correct_array[@]}給出數組的大小),然後e用於索引的wrong_array的相應元件和correct_array。希望你的文本文件中沒有任何引號(單或雙)。

+0

沒有使用雙引號。 –

+0

等一下,你的'correct.txt'和'wrong.txt'文件是否包含整個句子,還是隻包含需要糾正的部分? – e0k

+0

整個句子。我想糾正第三個文件。 correct.txt和wrong.txt具有相同的句子。第二個判決者是錯誤的,首先,這些判決被糾正了。 –

0

您應該始終使用{}與數組。這不起作用:

$array[1] 

但這會:

${array[1]} 

正如e0k你也應該使用雙引號,否則變量不會擴展到它的實際值指出。

不知道你的數組有什麼不同,但我認爲你想迭代它而不是使用整個事情。試試這種方法:

for i in `seq 0 $((${#correct_array[@]}-1))`; do 
    sed -i.bak "s/${wrong_array[$i]}/${correct_array[$i]}/" to_be_corrected.txt 
done 
+0

您的解決方案工作。 –

相關問題