Вы хотите awk. По-моему, почти никогда не причина использовать sed по awk, для чего-либо кроме тривиальных замен (не намного более сложный, чем sed-e 's/this/that'
). В этом случае это особенно контрпродуктивно.
можно сказать awk использовать, как разделитель, с помощью -F,
. Мы можем также поместить запятую в awk's переменная OFS
(выходной разделитель полей) так, чтобы печать
команда, которая повторно комбинирует позиционные поля, объединила их с запятой:
awk -F, 'BEGIN { OFS="," } ...'
Теперь мы всовываем логику. Awk поддерживает своего рода "реактивное программирование", в котором он позволяет присвоение на позиционные полевые переменные 1$
, 2$
... Когда вы присваиваете любому из них, это автоматически воссоздает 0$
переменная, которая первоначально остается на входной линии. Это воссоздает его путем объединения позиционных полей, с промежуточный OFS
. Таким образом мы можем сделать:
awk -F, 'BEGIN { OFS="," }
{ if ($6 == 1) $6 = "Cos4"
else if ($6 == 2) $6 = "Cos6"
print }' yourfile
Никакой regexing не требуется; если вы пересмотрите это шесть месяцев спустя, то будет почти немедленно очевидно, что это делает.
вышеупомянутый код может быть оптимизирован немного путем факторизации условных тестов в отдельные правила awk. То есть:
awk -F, 'BEGIN { OFS="," }
$6 == 1 { $6 = "Cos4" }
$6 == 2 { $6 = "Cos6" }
{ print }' yourfile
, Кроме того, мы можем "кодировать гольф" {печать}
путем замены его 1
:
awk -F, 'BEGIN { OFS="," }
$6 == 1 { $6 = "Cos4" }
$6 == 2 { $6 = "Cos6" }
1' yourfile
константа 1
служит булевым истинным условием. Условие не имеет никакого действия, таким образом, Awk предоставляет действие по умолчанию, которое является {печать}
. Однако теперь, если вы пересматриваете это шесть месяцев спустя, необходимо будет помнить это; сокращение программ таким образом иногда создает будущий долг.
, С другой стороны, хорошее преобразование, так как мы устанавливаем OFS
в эти , НАЧИНАЕТСЯ
блок, должно сторониться опция-F
и просто установить FS
в том же блоке:
awk 'BEGIN { FS = OFS = "," }
$6 == 1 { $6 = "Cos4" }
$6 == 2 { $6 = "Cos6" }
{ print }' yourfile
Мы можем использовать составленное присвоение, много как на языке C. Подобные, связанные вещи должны быть сделаны близко друг к другу похожим способом, если это возможно.
Во-первых, удалите параметр шлюза по умолчанию для eth1
везде, где вы его добавили. Если вы не уверены, запустите nmcli device status
:, если он говорит, что состояние eth1
равно unmanaged
, тогда eth1
вообще не контролируется NetworkManager.
Шлюз по умолчанию не является обязательным элементом конфигурации для каждого сетевого интерфейса. :его следует настраивать только для интерфейса, если оба )этого интерфейса подключены к сегменту сети, работающий маршрутизатор/шлюз в Интернет и b )вы действительно хотите использовать этот интерфейс для подключения к Интернету.
Если вы хотите использовать интерфейс только для доступа к сегменту сети, к которому он напрямую подключен, вы можете и должны полностью исключить настройку шлюза по умолчанию для этого интерфейса.
Если в сегменте, к которому подключен интерфейс, есть маршрутизатор/шлюз, но вы хотите подключиться только к определенному сегменту сети (или сегментам )через него, вам следует вместо этого добавить более конкретный маршрут entry (/entries ), чтобы указать, что это за сегменты.
Если вы настроили eth1
с NetworkManager, сначала запустите nmcli connection show
, чтобы определить имя сетевого подключения , которое NetworkManager в настоящее время использует для eth1
. Запустите nmcli connection show <connection-name>
, чтобы просмотреть все настройки для этого соединения.
Затем используйте, например,. sudo nmcli connection modify <connection-name> ipv4.gateway ""
для постоянного удаления ложного шлюза из настроек статического подключения для этого подключения.
Затем снимите флажок «игнорировать автоматически полученные маршруты» для eth0
и отключите и снова -включите соединение для eth0
. Если ваш DHCP работает правильно, теперь вы должны получить шлюз по умолчанию через eth0
, а поскольку eth1
в настоящее время не имеет шлюза по умолчанию, NetworkManager + ваш DHCP-клиент теперь должны автоматически принимать настройку шлюза по умолчанию из информации DHCP для eth0
.
Если ваш DHCP-сервер предоставляет вам IP-адрес, но не предоставляет информацию о шлюзе по умолчанию для eth0
, вам следует попытаться исправить DHCP-сервер. Если вы не можете этого сделать, вы можете обойти это, добавив отсутствующую информацию о шлюзе через NetworkManager или через файл конфигурации вашего DHCP-клиента -, но DHCP-сервер, который не предоставляет информацию о шлюзе по умолчанию, когда он не должен делает свою работу.