Faça isso como um loop em um shell bash em vez de passar a lista inteira para 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
Eu tenho o seguinte comando que pega uma certa parte de um arquivo no diretório atual, grava em um arquivo temporário, pega parte de um outro diretório, grava em um arquivo temporário e finalmente concatena esses dois arquivos. arquivos temporários em um e envia para result
:
sed -e '3003,$d' file1 > temp1;sed -n '3,$p' ../otherfile1 > temp2; cat temp1 temp2 > ../result1
Isso funciona para um arquivo, mas agora eu quero fazer isso em um diretório inteiro.
Eu pensei que usar um curinga no comando sed funcionaria:
sed -e '3003,$d' file* > temp1;sed -n '3,$p' ../otherfile* > temp2; cat temp1 temp2 > ../result*
mas é claro que não sabe automaticamente como numerar os arquivos temporários e o arquivo de saída.
Como posso usar este comando em um diretório inteiro, gerando um arquivo de resultado exclusivo para cada concatenação?
Usando um subshell, pode-se até evitar os arquivos "temp1" e "temp2". Além disso, se os nomes dos arquivos contiverem espaços, eu costumo usar "while":
n=1 ls | while read f; do ( sed -e '3003,$d' $f && sed -n '3,$p' ../$f ) > ../result${n} n=$((n+1)) done
Tags command-line sed macos terminal.app