输出文件到子目录

输出文件到子目录

我想egrep在一个充满文本的文件夹上运行几种不同的模式,并将结果输出到相应的文件夹中。我还试图使其简洁明了,因为这是我可能会经常使用的工作流程。

所以我有一个充满文本的文件夹docs,我想找到两个不同的正则表达式模式(regex1 和 regex2)并将它们输出到docs/regex1docs/regex2

我猜这样的事情会起作用

mkdir {docs/regex1,docs/regex2}
for file in docs/*
do
    egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
    egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
done

这给了我错误:

regex1/docs/001_regex1.txt: No such file or directory
regex2/docs/001_regex2.txt: No such file or directory

对于每个文件。如何设置输出进入 docs/regex1 而不是尝试进入 regex1/docs?

答案1

在您的示例脚本中,您有:

egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt

但你接着问:

对于每个文件。如何设置输出进入 docs/regex1 而不是尝试进入 regex1/docs?

您明确地将其放置regex1在要将输出重定向到的路径的开头。只需修复此问题以匹配您想要的内容,然后剥离主要路径$file

egrep -o -f regex1 "$file" > docs/regex1/"$( basename "${file%.*}" )"_regex1.txt
egrep -o -f regex2 "$file" > docs/regex2/"$( basename "${file%.*}" )"_regex2.txt

相关内容