我不明白为什么这个外循环只是因为内循环可以完成而退出。
$1
指的是包含大量模式/替换行的文件。 $2
是一个单词列表。问题是外环在第一个模式/替换线之后已经退出。我希望在$1
中的所有行都被读取后退出。
#!/bin/bash
#Receive SED SCRIPT WORDLIST
if [ -f temp.txt ];
then
> temp.txt
else
touch temp.txt
fi
while IFS='' read -r line || [[ -n "$line" ]];
do
echo -e "s/$line/p" >> temp.txt
while IFS='' read -r line || [[ -n "$line" ]];
do
sed -nf temp.txt $2
done
> temp.txt
done < $1
答案 0 :(得分:0)
我知道您需要计算de ded表达式并将其写入文件,然后将此表达式应用于其他文件。
这比你做的容易得多。
首先,您无需检查 temp.txt 是否已存在。将命令的输出重定向到文件时,如果该文件不存在,则会创建该文件。但是如果要重置文件,我建议您使用 truncate 命令。
在脚本的主体中,我不明白你为什么要把第二个while循环从文件中读取,但是你没有把文件读出来。
我认为你需要的是这样的:
truncate -s 0 sed_expressions.txt
while IFS='' read -r line || [[ -n "$line" ]]; do
echo -e "s/$line/p" >> sed_expressions.txt
done < $1
sed -nf sed_expressions.txt $2 > out_file.txt
试试并告诉我你是否需要这样做。
再见!