Я пытался rev
файл и затем передает его по каналу к cat > same_file
но это превращалось в пустой файл.
В то время как я попробовал rev file.txt | cat > file2.txt && mv file.txt file2.txt;
это работало.
Даже rev file.txt | cat >> file.txt;
обработанный.
Но когда я попробовал rev file.txt | cat > file.txt
это перестало работать.
Основная вещь, которую необходимо схватить в этом случае между обоими способами перенаправить (> и>>):
Перенаправления и перезаписи информация, где на это указали. Это происходит при получении любой информации через канал "|"
Перенаправления и конкатенируют к информации, на нее указали. Это происходит при получении любой информации через канал "|"
В обоих случаях, если файл не будет существовать, то он будет создан вместо этого. Только на">>" будет информация быть связанным, если Вы выполните ее снова на том же файле. С">" Вы просто перезаписали бы все, что Вы сделали на первом показе.
Но вот соглашение при использовании того же входного файла в качестве выходного файла. В том особом случае, если бы Вы используете">", Вы удалили бы информацию, которую должна проанализировать "входная" часть, так как выходной файл "перезаписал бы его". Таким образом в:
rev file.txt | cat > file.txt
То, что на самом деле происходит в "объяснении замедленного воспроизведения":
rev
готовится инвертировать содержание file.txt
и отправьте его для передачи по каналуrev
отправляет информация, чтобы передать по каналу, передать по каналу передает его потоком непосредственно к cat
.cat
получает информацию, она автоматически применит его к file.txt
это было установлено с.cat
не будет ожидать rev
передавать целый файл по каналу. Это просто запустит минуту, которую первая часть информации получает к нему, что означает, в зависимости от какого символа Вы использовали, он откроет соединение с file.txt
.file.txt
при ожидании новой информации для получения до него. С>> это открыло бы соединение с file.txt
и ожидайте новой информации о последней обнаруженной строке.file.txt
с>, rev
попытался бы сделать, это - работа, и ничего не получите потому что cat
удаленный все при подготовке к новой информации.Итак, почему другие работают после того, чтобы читать вышеупомянутое. Из-за этого:
rev file.txt | cat > file2.txt && mv file.txt file2.txt
Вот, пожалуйста передавая по каналу кошке, которая отправляет информацию в другой файл. В этом случае, обработанный входной файл file.txt
не то же как выходной файл file2.txt
. После этого Вы буквально перезаписываете целое file2.txt
с file.txt
, так весь процесс, сделанный cat
был удален. В основном целая строка могла быть упрощена как cp file.txt file2.txt
потому что это делает то же самое с тех пор file2.txt
в конце освобождает rev
и перезаписывается с mv
команда.
rev file.txt | cat >> file.txt
В этом случае Вы связываете информацию в тот же файл. Таким образом, это только открывает соединение с тем файлом, но не стирает информацию, как замечено с синглом>. Конечный результат должен быть, исходная информация плюс обратная информация.
Когда оболочка видит перенаправление, она открывает соответствующие файлы сначала, прежде, чем выполнить любую из включенных команд. Таким образом, когда Вы делаете:
foo file.txt | bar > file.txt
перенаправление к file.txt
причины это, чтобы быть усеченное прежде foo
выполняется и может читать file.txt
. На ноте стороны это - то, почему Вы не можете сделать:
sed 'blah' file.txt > file.txt
И почему sed
имеет оперативную опцию редактирования.
Наконец, делая:
.. | cat > file.txt
бесполезное использование кошки , особенно поэтому, при попытке читать от file.txt
раньше.
, Если Вы хотите инвертировать оперативный файл, , нет никаких ярлыков . Вы могли бы быть в состоянии использовать sed
или awk
приемы с оперативным редактированием.
Можно использовать Vim в режиме Ex:
ex -sc '%!rev' -cx file.txt
%
выбор все строки
!
команда выполнения
x
сохраняет и закрывается
>
редиректор (оператор), отправляющий вывод во что-то еще
(вход следующей команды, принтера..)
В Вашем случае вывод переходит к файлу file.txt
, если этот файл уже существует, он перезаписывается, если не он создается.
>>
добавлять оператор, если file.txt
уже существуйте, вывод добавляется в конец файла. если файл не существует, он создается, и вывод, записанный в новый файл, то же как >
(редиректор).