我有两个文件:
的 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 :(得分: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
和{的相应元素{1}}。希望您的文本文件中没有任何引号(单引号或双引号)。
答案 1 :(得分:0)
您应始终对阵列使用{}
。这不起作用:
$array[1]
但这会:
${array[1]}
正如e0k所指出的,你也应该使用双引号,否则变量不会扩展到它的实际值。
不知道你的数组有多少exaclty,但我认为你想迭代它而不是使用整个东西。试试这种方法:
for i in `seq 0 $((${#correct_array[@]}-1))`; do
sed -i.bak "s/${wrong_array[$i]}/${correct_array[$i]}/" to_be_corrected.txt
done