Redirecionar a saída do loop 'for' no cygwin

0

Eu tenho um diretório que tem 3 arquivos: a.txt b.txt c.txt Eu tenho que apagar as primeiras 4 linhas de cada arquivo Eu quero usar 'sed' ou 'awk' ou etc no Cygwin Eu faço isso:

for x in 'ls'; do
    sed '1,4d' $x
done

Funciona bem, mas eu preciso ter a saída em arquivos recém-criados, por exemplo. a2.txt b2.txt c2.txt. Como eu poderia refatorar meu loop? Obrigado

    
por susik 08.06.2016 / 16:37

2 respostas

0

Suponha que você esteja usando bash como seu shell no Cygwin (isto é, por padrão), você pode usar o recurso de expansão de parâmetro bash da seguinte forma:

for x in *.txt; do
    sed '1,4d' $x > ${x%.txt}2.txt
done

A chave é $ {x% .txt} para remover o sufixo do nome do arquivo (.txt) e, em seguida, acrescentar "2" e ".txt" como exemplo.

Existem outras refatorações: usar " ls " para obter a lista de arquivos a serem editados é redundante, usando a expansão do nome do caminho do próprio shell é suficiente.

    
por 08.06.2016 / 17:19
1
for x in *; do
    sed '1,4d' $x > $(basename $x .txt)2.txt
done

ou

for x in *; do
    sed '1,4d' $x > ${x/./2.}
done
    
por 08.06.2016 / 17:12

Tags