1 Востаннє редагувалося Master_Sergius (23.03.2015 18:19:14)

Тема: Замінити підрядок у певних рядках (bash, sed, awk)

На жаль, sed, як Я зрозумів, не підтримує повного синтаксису регекспів (неможливо "заглянути вперед/назад"). Тому, як би це зробити однією довгою командою - без поняття.

Структура файлу:

Прихований текст
variable_name1 = MARK1: field1; field2; field3
variable_name2 = MARK2: field1; field2; field3
variable_name3 = MARK1: field1; field2; field3
...

Мені потрібно замінити field2 лише для конкретного variable_name. Ось така цікава задачка. Хто перший підкаже - той молодець )

Я - молодець. Як завжди, хороша мисля приходить опосля:

cat file | awk '{  if (match($0, "variable_name")) { sub("field2", "new_field2"); print $0 } else print $0 }'

Ще лишилося подумати як його зразу в той же файл запхати

Ех, прийдеться направляти вивід в інший файл, а тоді його перемістити. Ну що ж, як завжди - сам спитав, сам розібрався, всім дякую!

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/

2

Re: Замінити підрядок у певних рядках (bash, sed, awk)

Ім'я змінної завжди йде на початку рядка? Тоді можна й sed'ом — вибрати лише рядки з заданим ім'ям змінної й провести в них заміну:

sed "/^variable_name .*/s/field2/new_field2/g"

(уточнення: після імені змінної завжди йде пробіл?)

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: Master_Sergius1

3

Re: Замінити підрядок у певних рядках (bash, sed, awk)

Хм... дійсно, в такому випадку і так можна ))

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/