Сетевой интерфейс всегда поддерживается некоторым модулем ядра или аналогичной частью ядра, которая представляет что-то , будь то физический интерфейс или некий виртуальный интерфейс, который каким-то образом общается с другими интерфейсами. Есть также интерфейс dummy
, который ничего не делает; вы можете назначить им IP-адрес, но, скорее всего, это не даст того, чего вы хотите добиться.
Как правило, вы можете добавлять новые интерфейсы с помощью варианта ip link add... type...
. Подробности и список типов см. в man ip-link
.
Вы также можете добавить несколько IP-адресов к одному интерфейсу. С ip
вам больше не нужны eth0:1
и т. д. из ifconfig
.
Я подозреваю, что это XY -вопрос , если вы расскажете нам, чего вы на самом деле хотите достичь, и для чего вам нужен второй IP-адрес, будет легче ответить.
Печатать все строки до тех пор, пока не будет найдена строка «заменить после», затем прочитать из другого файла и выйти:
sed '/^### REPLACE EVERYTHING AFTER THIS LINE ###$/{r replacement_file.txt
q;}' original_file.txt
sed -i
для сохранения изменений ... > tmp && mv tmp original
В GNU/awk:
Назовите два файла в качестве аргументов.
awk '{ print; } /^### REPLACE EVERYTHING AFTER THIS LINE ###$/ { nextfile; }' fn1 fn2
Это будет эффективно работать с любым awk и cat:
$ awk '{print} /### REPLACE EVERYTHING AFTER THIS LINE ###/{exit}' original_file.txt &&
cat replacement_file.txt
common_text
### REPLACE EVERYTHING AFTER THIS LINE ###
testing123
this_is_the_replacement_text
Как и в случае с любыми инструментами UNIX, для обновления оригинала просто запишите вывод во временный файл, а затем замените оригинал этим временным файлом:
{ awk '{print} /### REPLACE EVERYTHING AFTER THIS LINE ###/{exit}' original_file.txt &&
cat replacement_file.txt; } > tmp && mv tmp original_file.txt
при использовании gnu Awk:
awk '{print} /### REPLACE.../{system("cat replacement"); exit 0}' file
Если вы хотите отредактировать файл, отдайте предпочтение ed
вместоsed
:
ed -s original_file.txt <<'EOF'
/^### REPLACE/+1,$d
r replacement_file.txt
w
EOF
удалит все после строки замены, вставит содержимое другого файла, а затем сохранит изменения.
Проверено, работает нормально
Команда
sed -ni -e '1,/#/p' -e '/#/r replacement_file.txt' titled original_file.txt
выход
common_text
### REPLACE EVERYTHING AFTER THIS LINE ###
testing123
this_is_the_replacement_text
Использованиеsed
:
sed -n -e '1,/^### REPLACE EVERYTHING AFTER THIS LINE ###$/{ p; d; }' \
-e 'r replacement_file.txt' \
-e 'q' original_file.txt
Три sed
блока делают это:
p
, а затем вызываю d
, чтобы принудительно запустить новый цикл ("print; next
" вawk
). Обычно q
в третьем блоке выводит текущую строку перед выходом (это будет строка в примере чтения данных text_that_will
), но так как sed
вызывается с -n
, это значение по умолчанию вывод строки в конце цикла запрещен.
Результат приведенной выше команды с учетом ваших данных:
common_text
### REPLACE EVERYTHING AFTER THIS LINE ###
testing123
this_is_the_replacement_text
Чтобы обновить исходный файл, вы можете использовать sed -i...
или перенаправить вывод в новый файл, который затем заменит исходный на :
sed... original_file.txt >original_file.txt.new &&
mv original_file.txt.new original_file.txt