sed + сопоставить строку и добавить слово в первой строке в строке - PullRequest
2 голосов
/ 30 августа 2010

У меня есть следующий файл

    more file
    machine1  network netmask  broadcast

как добавить "_NAME" после первого слова в строке, содержащей слова "широковещательная сетевая маска"?

замечание sed также должно соответствовать только «трансляции сетевой маски», а затем добавить _NAME к первому слову в строке

пример: что мне нужно получить после выполнения команды sed

   machine1_NAME  network netmask  broadcast

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Это должно работать, так как мы не используем модификатор g, он будет совпадать только один раз на строку

sed -e 's/^[^ ]*\>/&_NAME/'

Он соответствует непробельным символам до первой границы слова, заменяяэто с собой и добавляет _NAME.Как уже упоминалось, без модификатора g он будет совпадать только один раз на строку, а если на строке есть начальные пробелы, просто удалите первый ^ -корь.

Редактировать
вы хотели, чтобы он совпадал только в определенных строках, так что здесь:

sed -e '/network netmask broadcast$/s/^[^ ]*\>/&_NAME/'

Первая часть является селектором, который гарантирует, что подстановка выполняется только в строках, где заканчивается network netmask broadcastлиния.Чтобы он соответствовал любым строкам с этими словами, просто удалите $ -anchor и добавьте * (пробел-звездочка) к пробелам, чтобы сделать их гибкими.Но вы, наверное, уже знали, что ..:)

1 голос
/ 30 августа 2010
sed '/network.*netmask.*broadcast/s|^\([ \t]*\)\(.[^ \t]*\) |\1\2_NAME|' file
...