2015-02-02 2 views
0

У меня есть файл нижеКак заменить значение в AWK

cat log.txt 

/root/logs/*.* { 
    dbset 
    quotatab 
    rsyslog.conf 
    dataload 23 
    server 25 
    inputrc 
} 

Я просто хочу, чтобы заменить vaule сервера. здесь это 25. но это может быть что угодно. Использование awk '/ server/{print $ NF}' log.txt может получить значение и заменить его с помощью sed. но я хочу, чтобы получить значение и заменить в awk себя. Кто-нибудь может мне помочь?

ответ

1

Да, вы могли бы сделать это с помощью awk, используя встроенную функцию awk или функцию gsub.

$ awk '/server/{sub(/.*/,"XX",$NF)}1' file 
/root/logs/*_log { 
dbset 
quotatab 
rsyslog.conf 
dataload 23 
server XX 
inputrc 
} 

В приведенном выше я просто заменить значение $ NF 25 в XX. Измените XX в приведенной выше функции sub на другое значение в соответствии с вашими потребностями.

ИЛИ

awk '/server/{$NF="XX"}1' file 

ИЛИ

Вы можете использовать СЕПГ.

$ sed '/server/s/[^ ]* *$/XX/' file 
/root/logs/*.* { 
    dbset 
    quotatab 
    rsyslog.conf 
    dataload 23 
    server XX 
    inputrc 
} 
+0

Кажется проще сделать '/ сервер/{$ NF = "XX"}' –

+0

Дa, это намного намного проще .. –

+0

здорово! он работает .. Спасибо Авинаш и Уильям :) Когда это произойдет, строка отображается в стартовой строке вместо существующей позиции. как его можно перемещать (вкладка или пробелы перед запуском линии) – Ela

Смежные вопросы