我有以下命令,它获取当前目录中文件的某个部分,将其写入临时文件,获取上一级目录中另一个文件的一部分,将其写入临时文件,最后将这两个临时文件连接成一个并将其输出到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)) 完毕