Хотя это возможно с GNU sed
с такими вещами, как:
sed -E 's/^#([0-9]+).*$/date -d @\1/e'
Это было бы ужасно неэффективно (и легко ввести произвольную команду инъекции уязвимостей 1 ), поскольку это означало бы запуск одной оболочки и одной команды date
для каждой #xxxx
строки, практически как плохо, как оболочка ] при чтении
цикла . Здесь было бы лучше использовать такие вещи, как perl
или gawk
, то есть утилиты обработки текста со встроенными возможностями преобразования даты:
perl -MPOSIX -pe 's/^#(\d+).*/ctime $1/se'
Или:
gawk '/^#/{$0 = strftime("%c", substr($0, 2))};1'
1 Если бы мы написали ^ # ([0-9]). *
вместо ^ # ([0-9]). * $
(как я делал ранее версия этого ответа), затем в многобайтовых локали, таких как UTF-8 (норма в настоящее время), с вводом типа # 1472047795 ; reboot
, где это
- это байтовое значение 0x80, которое не является допустимым символом, поэтому команда s
завершилась бы выполнением date -d @ 1472047795 ; перезагрузите, например,
. В то время как с дополнительным $
, эти строки не будут заменены.Альтернативный подход: s / ^ # ([0-9]) / date -d @ \ 1 # / e
, то есть оставить часть после даты #xxx
. как комментарий оболочки
Как вы написали с ничем перед символом перенаправления >
:
>filename.txt
буквально перенаправляет ничего в имя файла. txt
.
Обычно это делается для очистки / стирания содержимого текстового файла.
Если filename.txt
еще не существует, он будет создан.
Команда > myfile.txt
просто создаст файл или очистит содержимое файла, если таковое имеется.
Эта команда также предназначена для приписывания чего-либо файлу .txt, если перед этим была команда. Например, вы хотите создать файл с содержимым папки, поэтому вы можете выполнить ls -1 > myfile.txt
. Это создаст файл с именами ваших файлов и каталогов по строкам.
Вы также можете использовать его в качестве лог-файла вашего скрипта, поэтому вместо того, чтобы показывать вывод на экране, эта команда сохранит вывод в файл.
Нет такой команды, как filename.txt. Это всего лишь текстовый файл с именем filename.
Как вы спросили в заголовке
Что делает> filename.txt в сценарии оболочки
«>» используется для перенаправления вывода команды в текстовый файл. например, если вы запустите следующую команду в терминале
ifconfig > filename.txt
, то вывод команды ifconfig не будет отображаться в терминале. но новый файл будет создан в вашем рабочем каталоге или перезаписан, если тот же файл присутствует там. Вы можете прочитать вывод команды из файла filename.txt.
script.sh> file.txt
перезаписывает файл выводом сценария.
Принимая во внимание, что сценарий. sh >> file.txt
добавляет текст в конец файла.
Вы можете перенаправить любой вывод любой программы в командной строке в такой файл. Однако это перенаправляет только STDOUT, если вы также хотите, чтобы в файле были ошибки, используйте что-то вроде script.sh> file.txt 2> & 1
. Это отправляет STDERR в STDOUT, который записывается в файл.
По сути, он хранит вывод этой команды. Например. с
ls -ltr > command.txt
вывод ls -ltr
будет сохранен в command.txt
.