我想egrep
在一个充满文本的文件夹上运行几种不同的模式,并将结果输出到相应的文件夹中。我还试图使其简洁明了,因为这是我可能会经常使用的工作流程。
所以我有一个充满文本的文件夹docs
,我想找到两个不同的正则表达式模式(regex1 和 regex2)并将它们输出到docs/regex1
和docs/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