2017-01-31 9 views
0

У меня есть файл с несколькими линиями, которые содержат IP-адрес и потом ..... Название переменнойНайти строку, содержащая строку и заменить другую строку с новой строкой

примера

server 127.0.0.1:80 VARTOREPLACE 
server 127.1.0.1:80 VARTOREPLACE 
server 127.2.0.1:80 VARTOREPLACE 

Как я мог пойти о сканировании через файл и соответствующий шаблон IP-то, полагая, что вар, который соответствует в этой линии конкретной строки ..... пример

  • если ф соответствует 127.*.*.* заменить VARTOREPLACE с NEWVAR1
  • если ф соответствует 127.1.*.* заменить VARTOREPLACE с NEWVAR2
  • если ф соответствует 127.2.*.* заменить VARTOREPLACE с NEWVAR3

Я попытался

sed -i '/:127.0 /s/VARTOREPLACE/NEWVAR1/' file 

Любая помощь будет оценена.

+0

sed -i '/:127.0/s/VARTOREPLACE/NEWVAR1 /' файл –

+0

@ EricCox попробуйте с 'sed '/127.0/s/VARTOREPLACE/NEWVAR1/; /127.1/s/VARTOREPLACE/NEWVAR2/; /127.2/s/VARTOREPLACE/NEWVAR3/ 'file' –

+0

'127.1. *. *' Является подмножеством '127. *. *. *' - Предполагаю, что вам нужна более конкретная замена, если она применяется? –

ответ

0

Try ниже команды -

sed '/127.0.0/s/VARTOREPLACE/NEWVAR1/g;/127.1.0/s/VARTOREPLACE/NEWVAR2/g;/127.2.0/s/VARTOREPLACE/NEWVAR3/g' 
server 127.0.0.1:80 NEWVAR1 
server 127.1.0.1:80 NEWVAR2 
server 127.2.0.1:80 NEWVAR3 
0

Попробуйте эту простую команду:

sed -i -e '/127.0/s/VARTOREPLACE/NEWVAR1/' file -e '/127.1/s/VARTOREPLACE/NEWVAR2/' file 

Хотя я бы не рекомендовал его, если есть много других переменных. У вас должен быть другой файл, который сделает вид vlookup для вас

0

@ Эрик Кокс: Попробуйте также решение awk.

awk '$2 ~ /127.1.[0-9]+.[0-9]+/{$NF="NEWVAR2";print;next} $2 ~ /127.2.[0-9]+.[0-9]+/{$NF="NEWVAR3";print;next} $2 ~ /127.[0-9]+.[0-9]+.[0-9]+/{$NF="NEWVAR1";print;next}1' Input_file 

Проверяется поле второго равно ни одному из диапазонов, предоставленной вами в ваш пост (меняя * с [0-9], как * может содержать символы и т.д. тоже), то, если условие истинно относительно до $ 2, затем изменив $ NF (последнее поле) со значением «NEWVAR1» и т. д., затем распечатав новую форматированную строку и добавив следующую инструкцию, чтобы пропустить все дальнейшие утверждения. Наконец, упомянув 1 для печати строк, если ни одно из условий не соответствует, оно просто распечатает строку.