Как изменить строки в нескольких строках в файле с помощью sed - PullRequest
0 голосов
/ 10 мая 2018

У меня есть файл со следующими строками в файле с именем test.txt;

volumes:
  data:
    driver: test

Я хочу изменить их на;

volumes:
  # data:
    # driver: test

Но когда я использую следующую команду, она не работает:

sed 's/  data:\n    driver: test/  # data:\n   # driver: test/' test.txt

Что я делаю не так?

1 Ответ

0 голосов
/ 10 мая 2018

Вы пытаетесь сопоставить шаблон, который занимает несколько строк. sed пытается сопоставить регулярное выражение для каждой строки. Попробуйте использовать отдельный шаблон для каждой строки:

sed 's/^  data:/  # data:/;s/^    driver: test/    # driver: test/' test.txt

Есть две команды s, разделенные точкой с запятой ;. Кажется, вам нужно указать определенное количество пробелов (2 для строки data, 4 для driver), поэтому я оставил это значение тем же. Обратите внимание на использование ^ для привязки регулярного выражения к началу строки.


Предположим, ваш входной файл test.txt теперь:

volumes:
  data:
    driver: test
volumes:
  data:
    driver: test

Чтобы заменить только первое вхождение шаблона driver: test (но все вхождения шаблона data:), попробуйте что-то вроде:

sed 's/^  data:/  # data:/;0,/^    driver: test/s//    # driver: test/' test.txt

Это будет работать только с GNU sed . Результат:

volumes:
  # data:
    # driver: test
volumes:
  # data:
    driver: test

Чтобы соответствовать первому вхождению обоих, попробуйте

sed '0,/^  data:/s//  # data:/;0,/^    driver: test/s//    # driver: test/' test.txt

, что дает

volumes:
  # data:
    # driver: test
volumes:
  data:
    driver: test

См. Также Как использовать sed для замены только первого вхождения в файле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...