Невозможно перезаписать выходной файл с помощью перенаправления вывода> - PullRequest
0 голосов
/ 20 июня 2020

Файл с именем start.txt существует. Я использую команду perl, которая дает измененный вывод с использованием содержимого start.txt, и я пытаюсь перезаписать измененный вывод в тот же файл

cat start.txt | perl -ne 'print "$1-$1.mp4 Lecture $2 -\n" while /.*\/videos\/(.*?mp4).*?(?<= )(\d+)/g;'> start.txt

Выполнение вышеуказанной команды запускает файл. txt по какой-то причине пуст

Нет проблем с моей командой, потому что если я создам новый файл для перенаправления вывода, например ..

cat start.txt | perl -ne 'print "$1-$1.mp4 Lecture $2 -\n" while /.*\/videos\/(.*?mp4).*?(?<= )(\d+)/g;'> test.txt

Это отлично сохранит ожидаемый результат в test.txt но я не хочу создавать дополнительные файлы, мне нужно перезаписать сам существующий файл.

Я попробовал >| после прочтения, когда он использовался для принудительной перезаписи файлов, но все еще та же проблема. Я даже пробовал | tee start.txt, по-прежнему приводит к тому, что файл становится пустым.

Примечание: есть несколько команд awk, которые я использую, если я пытаюсь сохранить / перенаправить вывод в файл, из которого Функция awk читает текст из, это вызывает ту же проблему, что и выходной файл пуст, я бы тоже вставил команду awk, если кто-то спросит, хотя я думаю, что для этого было бы универсальное решение

1 Ответ

1 голос
/ 20 июня 2020

Причина пустого файла в этой команде

cat start.txt | perl -ne 'print "$1-$1.mp4 Lecture $2 -\n" while /.*\/videos\/(.*?mp4).*?(?<= )(\d+)/g;'> start.txt

- бит

> start.txt

.

Когда вы вводите команду в оболочку, оболочка анализирует его и готовит к запуску. Он создает безымянный канал для связи cat с perl, а также открывает выходной файл, усекает его и перенаправляет стандартный вывод perl в файл. Наконец, теперь, когда все необходимые перенаправления выполнены, он запускает различные команды. cat и perl в этом случае. Но файл, который будет читать cat, уже был усечен перенаправлением, которое вы просили сделать оболочку.

Как уже указывалось в комментарии, лучше всего избегать записи в тот же файл, который вы читаем из.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...