Con respecto a la "piratería de software", no estoy seguro de que sea necesaria en absoluto, porque la información del kernel sobre la opción "consola" incluye lp0 como una posibilidad. Entonces podría habilitar EPP/ECP en el puerto, habilitar una consola en Ubuntu, para que maneje este puerto paralelo DB25.
Acepto que el cable Cisco es un DB25 serial y no funcionará para el uso de un puerto paralelo.
Pero, sobre "hackeo de hardware"
Caso 1 )Para tener un conector USB en el otro extremo. Supongo que cualquier convertidor de puerto paralelo -a USB que se venda para conectar una impresora a un puerto USB podría funcionar como un cable de consola, y solo proporcionaremos un adaptador de cableado macho -a -macho adecuado de 25 pines. Un adaptador ya hecho -sería un cable LapLink.https://en.wikipedia.org/wiki/LapLink_cable#Wiring
Caso 2 )Para tener un conector serial )DB9 (en el otro extremo, necesitará un host USB que haga la traducción a un segundo cable serial USB -a -, pero solo una Raspberry Pi podría ser una solución económica para realizar la comunicación de paso desde el cable USB paralelo -a -al USB -a -.
solo para decir que es factible.
Я думаю, что этот awk
скрипт должен работать. Он делает все из скрипта, так как это самая простая настройка. Но см. далее альтернативу, которая позволяет обрабатывать ваш nextcounter как переменную оболочки:
BEGIN
{ getline counter < "nextcounter"; }
/TRANSID000/
{
replacement_string = sprintf("TRAN%05d", counter++);
gsub("TRANSID000", replacement_string);
print;
}
END
{ printf("%d\n", counter) > "nextcounter"; }
Вы можете вызвать его с помощью одного -вкладыша, подобного этому:
cat data | awk -- 'BEGIN { getline counter < "nextcounter"; } /TRANSID000/{ replacement_string = sprintf("TRAN%05d", counter++); gsub("TRANSID000", replacement_string); print; } END { printf("%d\n", counter) > "nextcounter"; }'
Обратите внимание:
TRAN000066
, т.е. имеющая всего 6 цифр,но тогда ваш образец вывода имеет строку типа TRAN00066
, т.е. с 5 цифрами. Я следовал вашему образцу вывода, но если вместо этого вам нужна точность 6 -цифр, просто измените строку TRAN%05d
наTRAN%06d
nextcounter
, был первым номером для замены. Если вместо этого вы хотите сначала увеличить число, просто замените часть counter++
на++counter
nextcounter
как файл, содержащий только одну строку, содержащую только числовое целое число. Если это не совсем так, вам нужно изменить скрипт BEGIN
и END
раздел Если вы предпочитаете , а не , чтобы сценарий awk обновлял ваш nextcounter
файл напрямую и вместо этого обрабатывал такое значение nextcounter как переменную оболочки, вам потребуется немного более сложная настройка, включающая использование временного файла. для хранения обновленного счетчика. Что-то вроде этого:
tempfile=$(mktemp) ; cat data | awk -v counter="${nextcounter:-0}" -v tempfile="${tempfile}" -- '/TRANSID000/{ replacement_string = sprintf("TRAN%05d", ++counter); gsub("TRANSID000", replacement_string) ; print; } END { printf("%d\n", counter) > tempfile; }' && read nextcounter < "${tempfile}" ; rm "${tempfile}"
Разобрано для объяснения:
tempfile=$(mktemp) \ # create temporary file
cat data | pipe data to awk...
awk -v counter="${nextcounter:-0}" -v tempfile="${tempfile}" -- \ # provide initial counter and tempfile to awk
'/TRANSID000/ \
{ replacement_string = sprintf("TRAN%05d", ++counter); \
gsub("TRANSID000", replacement_string) ; \
print; \
} \
END \
{ printf("%d\n", counter) > tempfile; }' \ # write updated counter to temporary file
&& read nextcounter < "${tempfile}" \ # read updated counter into ${nextcounter} shell variable
rm "${tempfile}"
Это ожидает начальный счетчик в ${nextcounter}
и обновляет ту же самую переменную в конце.
ЕСЛИ создание временных файлов невозможно, вы можете попробовать использовать файловые дескрипторы -поверх безымянных каналов, но для этого требуется Bash v3+ и система, позволяющая открывать каналы в режиме чтения/записи. Linux это позволяет, MacOS — нет, не знаю о других Unix -es.
Было бы похоже:
exec 9<> <(:) ; cat data | awk -v counter="${nextcounter:-0}" -- '/TRANSID000/{ replacement_string = sprintf("TRAN%05d", ++counter); gsub("TRANSID000", replacement_string); print; } END { printf("%d\n", counter) > "/dev/fd/9"; }' && read nextcounter <&9 ; exec 9<&-
В разобранном виде:
exec 9<> <(:) # open fd 9 onto unnamed pipe R/W
cat data | \
awk -v counter="${nextcounter:-0}" -- \
'/TRANSID000/ \
{ replacement_string = sprintf("TRAN%05d", ++counter); \
gsub("TRANSID000", replacement_string); \
print; } \
END \
{ printf("%d\n", counter) > "/dev/fd/9"; }' \ # write updated counter to fd 9
&& read nextcounter <&9 # read updated counter from fd 9 into ${nextcounter} shell variable
exec 9<&- # close fd 9
если ваш файл находится в «файле», в оболочке типа bash
inp=66;i=$inp; while read -r ln;do;echo $ln sed -E "s/TRANSID000/TRAN0000$i/i";let i++;done<file
Сperl
:
perl -spe 's/TRANSID000\K/$n++/e' -- -n=66 < your-file
Или, если вам нужно, чтобы число было дополнено нулями до длины 5 (00001, 00010, 00100...):
perl -spe 's/TRANSID\K000/sprintf "%05d", $n++/e' -- -n=66 < your-file