【发布时间】:2018-02-20 15:49:50
【问题描述】:
我不明白为什么这个外循环仅仅因为内循环可以完成而退出。
$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
【问题讨论】:
-
您不需要
bash和sed的组合来完成这项工作。只需给我们所需的预期输入和输出 -
目前还不清楚当前脚本产生了什么错误行为。
-
对同一输入流的第二次
read调用将读取第二行,并且不会像您打算做的那样 -
感谢 Inian,该解决方案的灵感来自您最后的评论。我实际上不需要第二个 while 循环 :-)
-
我很确定这是重复的。如果您尝试从文件中读取一堆模式并使用它们在另一个文件中执行替换,请参见例如stackoverflow.com/questions/35253663/…
标签: bash