Я использую ubuntu 14.4
и пытаюсь перенаправить вывод grep
команды в файл, но продолжаю получать эту ошибку:
grep: input file 'X' is also the output
Я искал эту проблему и только что обнаружил, что это ошибка, ubuntu 12.4
и нет никакого описания, может кто-нибудь помочь мне разобраться в этой проблеме?
Я запускаю следующую команду:
grep -E -r -o -n r"%}(.*){%" > myfile
shell
ubuntu
command-line
grep
io-redirection
Kasramvd
источник
источник
grep pattern file > file
то это не сработает. Вы не можете использовать тот же файл, что и для ввода и вывода для grep.bash: ../f.txt: Permission denied
grep
в командеgrep pattern file > file
видит уже пустой файл, поэтому ничего не имеет в качестве ввода. Однако, если вы используете>>
вместо>
этого файл не пустой, но grep выдает ошибку в любом случае, так как это может привести к рекурсивной обработке одной и той же строки (шаблона) снова и снова.Ответы:
Невозможно использовать тот же файл, что и для ввода и вывода
grep
. Вы можете рассмотреть следующие варианты:временный файл
СЭД
поместите весь файл в переменную (не очень хорошая идея для больших файлов)
источник
sed -i '/pattern/!d' file
sed -i -n 's/.*\(pattern\).*/\1/p' file
sed
синтаксис.Вы можете использовать
--exclude
поле в вашейgrep
команде следующим образом:источник
myfile
он уникален, так как он применяется только к базовому имени файла. Вы не хотите пропускать файлы с тем же именем в других каталогах.Я нашел способ в Bash:
cat >> IN_OUTPUT_FILE <<< "$(grep something IN_OUTPUT_FILE)"
Команда в
<<<"..."
будет выполнена первой.источник