Eu tenho um problema extremo e todas as soluções que posso imaginar são complicadas. De acordo com minha experiência em UNIX / Linux, deve haver uma maneira fácil.
Quero excluir os primeiros 31 bytes de cada arquivo /foo/
. Cada arquivo é longo o suficiente. Bem, tenho certeza de que alguém me fornecerá uma solução surpreendentemente fácil que simplesmente não consigo imaginar. Talvez awk?
text-processing
files
sed
awk
von der tann
fonte
fonte
Respostas:
ou mais rápido, graças à sugestão de Gilles:
Nota: A cauda do Posix especifica "-c +32" em vez de "+ 32c", mas a cauda padrão do Solaris não gosta:
/usr/xpg4/bin/tail
está bem com ambas as sintaxes.fonte
dd
aqui é um exagero,tail
é mais apropriado (mais simples, menos risco de erro de digitação, nenhuma mensagem espúria no stderr).cut
? (não deve a cauda ser ... Asis, ele não funciona para mim .../usr/xpg4/bin
antecipado o/usr/bin
seuPATH
, ou ficará preso no início dos anos 90. Muitos departamentos (por exemplo, GNU, BusyBox) não suportam mais a+32c
sintaxe histórica e consideram um arquivo chamado+32c
(conforme requer o POSIX).Os seguintes comandos cortam os primeiros 31 bytes
$file
(usando$file~
como uma cópia temporária):Você só precisa listar ou
find
todos os arquivos abaixo/foo/
e executar os dois acima para cada$file
encontrado.fonte
tail -c +32
gera sua entrada menos os primeiros 31 bytes. (Sim, o argumento está desativado em um.) Para editar um arquivo no local, use esponja em um loop ou, se você não o tiver e não quiser se preocupar, faça seu trabalho no shell:Se os comandos forem interrompidos por qualquer motivo (por exemplo, falta de energia), pode ser difícil descobrir de onde você parou. Gravar os novos arquivos em um diretório separado facilitaria as coisas.
Se os arquivos forem realmente grandes (por exemplo, grandes o suficiente para que duas cópias de uma única sejam um problema), você poderá usar uma das técnicas mencionadas neste encadeamento .
fonte
Você pode usar o Vim no modo Ex:
%
selecione todas as linhas!
comando de execuçãox
salvar e fecharfonte