我的文件夹中有一些文件。通过运行以下命令,我可以创建一个包含已过滤文件名(test1、test2、test3)的列表,并使用 xargs 将其传递给 grep 过滤命令筛选命令中的文件包含一些要过滤掉的值。
ls -Art1 | grep test | xargs -L1 grep -vf filter > ouput
但是,当运行此命令时,输出文件包含 test1、test2 和 test3 的过滤结果。一体。
我想为每个 test1 > test1_output、test2 > test2_output,...都有单独的文件,因此采用 xargs 值,只需向其中添加一个额外的字符串“_output”即可生成输出文件名
答案1
无需通过管道输出来ls
搜索名称匹配。只需使用 shell glob 即可。这还允许您为每个过滤器尝试定义一个输出文件
for file in *test*
do
[ -f "./$file" ] && grep -vf filter "./$file" >"${file}_output"
done
从技术上讲,这可能是一组与您的文件匹配略有不同的文件,ls -A
因为您的代码考虑点文件,而我的代码则不考虑。如果相关的话可以修复。
在你的评论您提到您正在对每个文件执行两项操作。如果我理解正确的话,那么对于这种情况你可以修改代码如下:
for file in *test*
do
if [ -f "./$file" ]
then
grep -f filter "./$file" >"${file}_delta"
grep -vf filter "./$file" >"${file}_output"
fi
done