Условие Sed заменить чтение из файла

Терминал является наблюдателем процесса, такого как оболочка. Сам терминал не выполняет никаких команд -, которые предназначены для оболочки -, но без терминала вы не можете взаимодействовать с оболочкой или любой программой, которую она запускает.

Обычно, когда вы закрываете окно терминала, оно отправляет командной оболочке сигнал закрыть его, что, в свою очередь, убивает любой запущенный там процесс.

Вы можете запустить процесс под screen. Это создает «виртуальный терминал» для запуска оболочки. Ваше «настоящее» окно терминала может подключаться к этому сеансу screenи управлять виртуальным терминалом, предоставленным screen. Чистый эффект заключается в том, что он выглядит совершенно нормально, НО вы также можете отсоединиться от виртуального экрана и позволить оболочке продолжать работу.

screen                     # Create a leader and a virtual terminal/screen running a shell
screen -ls                 # List sessions (attached/detached)
screen -r                  # Reattach to the single detached session
screen -r {identifier}     # Reattach to the named detached session
screen -md {command...}    # Make a new detached session running {command...}

Наконец, Ctrl Ad отсоединяется от текущего сеанса и Ctrl A? дает вам список интерактивных команд.

-2
07.08.2020, 14:55
2 ответа

Почему бы просто не сделать это:

replace="$(cat atana2)"

sed "s|127.0.0.1|$replace|" atana1

Двойные кавычки вместо одинарных заставляют sedрасширять переменную.

Выход:

location
allow 27.0.12.12;
deny all;

Как только вы убедитесь, что у вас есть то, что вы хотите:

sed -i "s|127.0.0.1|$replace|" atana1

Имейте в виду, что, хотя это не имеет никакого влияния на этот случай, если есть строка, такая как 127102031, которая появляется перед тем, что вы хотите заменить, она также заменит ее, потому что .будет расширяться до любого символа. Если у вас будет такой файл в будущем, обязательно замените его на определенную строку, например, в следующем примере:

location
allow 127.0.0.1; allow 127102031;
deny all;
127102031 127102031

Код:

sed "2s|127.0.0.1|$replace|" atana1

Это заменит первое вхождение во второй строке.

Выход:

location
allow 27.0.12.12; allow 127102031;
deny all;
127102031 127102031

Несколько экземпляров, как в следующем примере:

location
allow 127.0.0.1; allow 127102031;
deny all;
127102031 127102031

Второе вхождение во второй строке:

sed "2s|127.0.0.1|$replace|2" atana1

Выход:

location
allow 127.0.0.1; allow 27.0.12.12;
deny all;
127102031 127102031

Опять же, в этом случае вы можете без проблем использовать то, что у меня есть в первую очередь, но это просто для справки в будущем, когда файл может быть другим.

2
18.03.2021, 23:14

Пробовал командой awk

i=`cat `

awk -v i="$i" '{gsub("127.0.0.1",i,$0);print }'  atana1

выход

location
allow 27.0.12.12;
deny all;
0
18.03.2021, 23:14

Теги

Похожие вопросы