Вы не можете надежно передать текст sed
как это. В тексте замены необходимо заключить в кавычки \
, &
и s
разделитель (обычно /
) путем добавления обратной косой черты перед ними. В regex части необходимо заключить в кавычки \[.*^$
и разделитель.
Кроме того, Вы оставили значение переменной, которая будет далее расширена оболочкой. Всегда используйте двойные кавычки вокруг подстановок переменных, т.е. "$foo"
, нет . Без двойных кавычек значение интерпретируется как разграниченный пробелом список шаблонов шарика; пробел и $foo
\[?*
расширены.
Если Вы не хотите изменять способ, которым работает сценарий, заключите все в кавычки правильно:
ann="<?php echo '<h2>'.views_get_view('frprev_ann')->get_title().'</h2>'; echo views_embed_view('frprev_ann'); ?>"
col1content=$(echo "$ann" | sed 's/[\\\/&]/\\&/g')
sed -i "s/r${rownum}c1content/${col1content}/g" templates/page--front.tpl.php
С другой стороны, используйте awk или жемчуг, который может считать переменную среды из сценария.
ann="<?php echo '<h2>'.views_get_view('frprev_ann')->get_title().'</h2>'; echo views_embed_view('frprev_ann'); ?>"
awk -v ann="$ann" -v rownum="$rownum" '
BEGIN {pattern = "r" rownum "c1content"; }
1 {gsub(pattern, ann); print}
' templates/page--front.tpl.php >templates/page--front.tpl.php.new
mv templates/page--front.tpl.php.new templates/page--front.tpl
Это зависит от того, какие инструменты установлены на клиентском устройстве / поддерживаются ядром.
Возможные методы передачи файлов (неупорядоченные):
Netcat
или SOCAT
или с Bash
и / dev / tcp wget
или Curl
С помощью веб-сервера Прочтите Простая передача файлов и Как Чтобы получить файл на хосте, когда все, что у вас есть последовательная консоль? для более возможностей.
Desktop.jpg
с устройства на ваш компьютер с методом NetCat / NC: на вашем компьютере, временно отключить (или переконфигурить, если это возможно) любой брандмауэр и Запустите
netcat -l -p 10000 > desktop.jpg
и на устройстве
busybox nc A.B.C.D -p 10000 < desktop.jpg
, где вам нужно заменить a.b.c.d с IP-адресом вашего ПК. Как только передача была успешной, процесс NetCat на вашем компьютере должен автоматически остановиться. Если нет, что-то не так, и вы можете остановить его с Ctrl + C
для другого направления, просто обмениваться <
и >
с обеих сторон. Сделайте первую резервную копию оригинала Desktop.jpg
( CP Desktop.jpg desktop_orig.jpg
).
@JOFEL И все остальные, большое спасибо за вашу помощь. Я думаю, что устройство имеет индивидуальные ОС, установленные, поскольку он распознал только некоторые определенные команды Linux. Netcat не распознается устройством. Однако сегодня я получил успех для передачи файла с помощью команды TFTP. Я успешно заменил файл desktop.jpg с этой командой. То, что я сделал, создал TFTP Server в Window System. Войдите в систему через Telnet на устройстве и запустите эти команды:
Загрузить файл TFTP -L -P. TFTP -L Desktop.jpg - 192.168.0.249 69
Загрузить файл tftp -l desktop.jpg -g 192.168.0.249 69
Дата установки ОС неоднозначна: что считается новой установкой? Если все файлы после обновления являются новыми, то все равно ли это одна и та же установка? «Официальный» сценарий установки может записывать дату, но это зависит от распределения, и большинство искажений этого делать не будут. Однако всегда можно проверить самую раннюю дату файлов в /bin/
, /etc/
и /boot/
, большинство из них обновляется очень редко. uname -a
расскажет вам о ядре, но многие distros обновляют ядро во время его обновления, и /boot/
записи с ними - является ли новое ядро новой установкой?
Для оборудования это та же проблема - какую часть оборудования вы хотите проверить? Лучше всего выбрать системную плату: возраст встроенного ПО (BIOS/EFI...).
dmidecode
расскажет вам хотя бы о микропрограмме - версия BIOS и дата ближе всего к тому, о чем вы спрашиваете. Лучше отформатирован и легче читается lshw
, который также рассказывает о дате встроенного ПО. Также попробуйте hwinfo
- он не сообщает даты, но может быть полезен когда-нибудь. Для жестких дисков smartctl
многое скажет - жесткие диски имеют возможности самоконтроля.
Большинство людей просто делают sort -n input | head -n1
(или tail), это достаточно хорошо для большинства сценариев. Однако это немного неуклюже, если вы имеете числа в строке вместо столбца - вы должны распечатать его в правильном формате ( tr ''\n'
или что-то подобное).
Оболочки не совсем идеальны для цифровой обработки, но вы можете легко просто вставить в какую-то другую программу, которая лучше в ней. В зависимости от ваших предпочтений, вы макс. вызываете dc
(немного запутанный, но если вы знаете, что вы делаете, это хорошо - см. ответ микесерв), или awk 'NR = = 1 {max = $1} {if ($1 > max) {max = $1}} END {print max}'
. Или, возможно, perl
или python
, если вы предпочитаете. Одним из решений (если вы хотите установить и использовать менее известное программное обеспечение) будет ised
(особенно если ваши данные находятся в одной строке: вам просто нужно сделать ised --l input.dat 'max $1'
).
Потому что вы просите два числа, это все перебор. Этого должно быть достаточно:
python -c "print(max($j,$k))"
-121--11331- Попробуйте с помощью команды rcp
.
Используйте man rcp
для получения дополнительной информации в случае необходимости автоматизации передач.
Кстати, вы знаете, что это очень небезопасно , верно?
На устройстве нет ни ssh, ни ftp(или др.).
Итак, я делаю следующее:
telnet a.b.c.d | tee telnet.log
cat file.txt
telnet.log
from trashДолжно быть легко написать утилиту для скачивания/загрузки файла по telnet
.Я сделал это сейчас этими методами:
Создать FTP-сервер (установив SolerWinds) в Window System. Войдите через Telnet на устройстве и запустите эти команды:
Для загрузки файла:
tftp -l <FileName> -p <TFTP Server IP> <Port No of TFTP>
Пример:
tftp -l desktop.jpg -p 192.168.0.249 69
или для загрузки файла:
tftp -l <FileName> -g <TFTP Server IP> <Port No of TFTP>
Пример:
tftp -l desktop.jpg -g 192.168.0.249 69
Расположение файла TFTP C: \ Tftp-root
Я использую следующий метод для загрузки небольших бинарных файлов через telnet в мой Windows-бокс:
На вашем ПК:
ncat -l -p 3000 > file.name
На удаленном устройстве:
busybox nc -w 3 <your PC IP> 3000 < file.name