Grep没有这样的文件或目录错误在Bash脚本中,我应该插入等待命令吗?

时间:2016-09-28 15:28:23

标签: linux bash shell sed grep

我正在运行一个运行良好的脚本。然而,昨天,我有一些错误。 这些错误发生在脚本的几个循环之后:

sed: cant read file3.txt: No such file or directory
grep: file3.txt: No such file or directory
grep: file3.txt: No such file or directory
sed: cant read file3.txt: No such file or directory
grep: file3.txt: No such file or directory

请记住,这些错误并非始终如一。它偶尔发生在脚本这一部分附近的某个地方。 File3.txt是找不到的文件:

cat file1.txt | while read LINE; do grep -m 1 $LINE file2.txt >> file3.txt; done
sed -i 's/string//g'  file3.txt
grep 'string' file3.txt | cut -d '|' -f1-2 > file4.txt
grep -v 'string' file3.txt | cut -d '|' -f1-2 >> file5.txt
sed -i 's/string//' file3.txt
grep -Fvf file3.txt file1.txt > file6.txt

现在,我想是因为附加了file3.txt,或者稍后由SED操作,有时下一个命令启动太快而无法找到该文件?我应该在其间放一个等待命令吗?

我查找了很多有此错误的网页,但无法找到任何内容:

如果您认为等待或睡眠命令会有所帮助,请告诉我。或者,如果您认为有更好的解决方案,那也会很棒。我在Cygwin终端上运行。非常感谢任何见解。

3 个答案:

答案 0 :(得分:3)

不是重定向到file3.txt循环内的while,而是重定向整个循环。然后,即使循环从不运行,也会创建该文件,因为输入文件为空。

while read LINE; do 
    grep -m 1 $LINE file2.txt
done < file1.txt > file3.txt

答案 1 :(得分:1)

如果file1.txt为空,则不会创建file3.txt。

答案 2 :(得分:1)

如果存在关键字符(空间是最简单的字符),do grep -m 1 $LINE file2.txt也会导致问题 我们假设$LINE变量包含多个以空格分隔的单词:hello world 现在命令看起来像这样:grep -m 1 hello world file2.txt - grep解释看起来像这样:让我们在名为hello的文件中找到所有world,在当前文件夹中找到名为file2.txt的文件。 / p>

使用"$LINE"代替$LINE会引导您完全不同的情况 看看以下两者之间的区别:

grep -m 1 $LINE file2.txt
grep -m 1 "$LINE" file2.txt
相关问题