Ответ 1
Использование sed
и описанного шаблона:
sed '/192.168.1.2/s/$/ myalias/' file
Используя sed
и номер конкретной строки:
sed '2s/$/ myalias/' file
Я хочу добавить псевдоним в конец определенной строки моего файла hosts. Например
У меня
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com
192.168.1.3 www.address3.com
Я хочу, чтобы это выглядело как
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com myalias
192.168.1.3 www.address3.com
Я хочу найти строку, содержащую 19.2.68.1.2, и добавить myalias в конце. Строка не обязательно является второй строкой в файле, как показано здесь. Это может быть где угодно.
Использование sed
и описанного шаблона:
sed '/192.168.1.2/s/$/ myalias/' file
Используя sed
и номер конкретной строки:
sed '2s/$/ myalias/' file
Возможно также решение awk
:
awk '{if (/^192\.168\.1\.2 /) {$0=$0 " myalias"}; print}' hosts
Вышеприведенное число читает строки из файла hosts
один за другим. Если строка имеет наш IP-адрес в начале, то myalias
добавляется к строке. Затем строка печатается на stdout
.
Обратите внимание на две вещи. В поле if
есть пробел после IP-адреса. В противном случае регулярное выражение может соответствовать 192.168.1.20
и т.д. Кроме того, периоды в IP-адресе экранируются с помощью обратных косых черт. В противном случае они могут соответствовать любому символу.
Более крутой формой решения является:
awk '/^192\.168\.1\.2 /{$0=$0 " myalias"}1' hosts
Вот еще один способ: awk
awk '/search pattern/{print $0 " myalias"; next}1' file
Я бы пошел с awk
, так как вы можете использовать строки и не использовать регулярное выражение, где нужно будет экранировать точки, а также использовать привязки и/или границы слов. Также вы можете убедиться, что строка соответствует значению в столбце 1.
awk '$1==s{$0=$0 OFS alias}1' s=192.168.1.2 alias=myalias file
Также, когда он является частью более крупного script, неплохо иметь возможность использовать переменные строки. С помощью sed
вам понадобятся переменные оболочки и трюки.