使用通配符作为输入时重定向 cat 命令

使用通配符作为输入时重定向 cat 命令

我有以下命令,它获取当前目录中文件的某个部分,将其写入临时文件,获取上一级目录中另一个文件的一部分,将其写入临时文件,最后将这两个临时文件连接成一个并将其输出到result

sed -e '3003,$d' file1 > temp1;sed -n '3,$p' ../otherfile1 > temp2; cat temp1 temp2 > ../result1

这对一个文件有效,但现在我想对整个目录执行此操作。

我认为在 sed 命令中使用通配符可以起作用:

sed -e '3003,$d' file* > temp1;sed -n '3,$p' ../otherfile* > temp2; cat temp1 temp2 > ../result*

但它当然不会自动知道如何对临时文件和输出文件进行编号。

如何在整个目录上使用此命令,为每个连接输出唯一的结果文件?

答案1

将其作为 bash shell 中的循环执行,而不是将整个列表传递给 sed。

let "n = 1"
for file in *
do
  sed -e '3003,$d' $file > temp1;sed -n '3,$p' ../$file > temp2; cat temp1 temp2 > ../result${n} ;
  let "n = n + 1"
done

答案2

使用子 shell,甚至可以避免使用“temp1”和“temp2”文件。此外,如果文件名包含空格,我倾向于使用“while”:

n=1
ls | 读取 f 时;执行
  (sed -e'3003,$d'$f && sed -n'3,$p'../$f)>../result${n}
  n=$((n+1))
完毕

相关内容