Eu uso ubuntu 14.4
e tento redirecionar a saída do grep
comando para um arquivo, mas continuo recebendo este erro:
grep: input file 'X' is also the output
Eu procurei por esse problema e descobri que havia um bug ubuntu 12.4
e não há descrição. Alguém pode me ajudar a descobrir esse problema?
Eu executo o seguinte comando:
grep -E -r -o -n r"%}(.*){%" > myfile
shell
ubuntu
command-line
grep
io-redirection
Kasramvd
fonte
fonte
grep pattern file > file
, não funciona. Você não pode usar o mesmo arquivo que entrada e saída para grep.bash: ../f.txt: Permission denied
grep
no comandogrep pattern file > file
já vê o arquivo vazio, então não tem nada como entrada. No entanto, se você usar em>>
vez disso>
, o arquivo não estará vazio, mas o grep lançará um erro de qualquer maneira, pois pode levar ao processamento recursivo da mesma linha (padrão) repetidas vezes.Respostas:
Não é possível usar o mesmo arquivo como entrada e saída para
grep
. Você pode considerar as seguintes alternativas:Arquivo temporário
sed
coloque o arquivo inteiro na variável (idéia não brilhante para arquivos grandes)
fonte
sed -i '/pattern/!d' file
sed -i -n 's/.*\(pattern\).*/\1/p' file
sed
sintaxe também.Você pode usar o
--exclude
campo em seugrep
comando da seguinte maneira:fonte
myfile
é exclusivo, pois se aplica apenas ao nome da base do arquivo. Você não deseja pular arquivos com o mesmo nome em outros diretórios.Eu encontrei uma maneira no bash:
cat >> IN_OUTPUT_FILE <<< "$(grep something IN_OUTPUT_FILE)"
O comando in
<<<"..."
será executado primeiro.fonte