Вы получили сообщение об ошибке sudo: no tty present
, потому что ssh
не выделяет автоматически устройство tty, когда вы находитесь в неинтерактивном режиме. т.е. вы указали команду для выполнения на удаленной системе.
Вы можете заставить ssh выделить устройство tty, используя опцию -t
.
ssh -t user@ip "sudo tar zc -C /home/minecraft/multicraft/servers/server2 ." | tar zx
Вот решение GNU awk
:
awk '/^ *\(/{print}!/^ *\(/{split($1,aa,"[0-9]+",bb);printf "\"#%s\" )\n", bb[length(bb)]+1}'
или аналогичный, но разделенный на несколько строк для удобства чтения:
awk '/^ *\(/ { print }
!/^ *\(/ { split( $1, aa, "[0-9]+", bb )
printf "\"#%s\" )\n", bb[length(bb)]+1 }'
/^ *\
и !/^ *\(/
— два правила адресации, охватывающие строки, начинающиеся с необязательных пробелов и открывающей круглой скобки... и строки без них.
split( $1, aa, "[0-9]+", bb )
Для строк, которые этого не делают, разделите строку на два массива. aa
— это содержимое строки, ограниченное регулярным выражением «[0 -9]+», а bb
— разделители, соответствующие регулярному выражению. Последний элемент bb
— это то, что вас интересует.
printf "\"#%s\" )\n"
форматирует строку вывода, ожидая одну переменную...
bb[length(bb)]+1
единица плюс значение последнего элемента bb.
Это больше работа дляperl
:
perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+1/ge' <file
С переменной:
INCR=1 perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$ENV{INCR}/ge' <file
Или:
perl -spe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$incr/ge' -- -incr=1 <file
gawk '{
sub(/#.*\.djvu/, "#" $1 + 1 ".djvu")
print
}' FPAT='[0-9]+\.djvu' input.txt
Идея следующая:
.djvu
с начальными цифрами из имени файла djvu
, используя шаблон [0-9]+\.djvu
(FPAT
). Пример:исходное имя файла — #all_24223_to_00243.cpc0002.djvu
, извлеченная часть будет 0002.djvu
. djvu
имя файла #.*\.djvu
на извлеченное, предварительно увеличив его на 1
. Пример:взять целую строку $0
и подставить #all_24223_to_00243.cpc0002.djvu
внутри нее, чтобы0002.djvu + 1
(это выражение приводило к обычному числу 3
, из-за того, как работает преобразование строки в число в gawk
). Добавьте к нему знак #
и расширение .djvu
. Результат:#3.djvu
. Это решение будет работать только для строк с одним именем файла djvu
, как в вашем образце ввода.
Вход
(bookmarks
("Cover"
"#01.djvu" )
("Title page"
"#all_24223_to_00243.cpc0002.djvu" )
("Preface"
"#all_24223_to_00243.cpc0004.djvu" )
Выход
(bookmarks
("Cover"
"#2.djvu" )
("Title page"
"#3.djvu" )
("Preface"
"#5.djvu" )