Проблема с установкой fedora 21

for f in file1 file2 file...; do
  sed -i -f <(grep -n PATTERN "$f" | while IFS=: read line rest; do printf "%dd; " $((line+3)); done) "$f"
done

Чтобы разделить это на части:

  1. Перебрать файл1 файл2 файл ...

  2. создать выражение sed внутри подстановки процесса, чтобы в конечном итоге запустить против файла.

  3. grep выводит номера строк, соответствующие ШАБЛОНУ в файле (вместе с фактической совпадающей строкой).

Пример вывода:

2:2 PATTERN
3:3 same PATTERN
6:6 another PATTERN
  1. цикл while удаляет номер строки, отбрасывая совпадающую строку, затем отправляя ее в printf с увеличением на 3

  2. printf печатает номер целевой строки, за которым следует sed d Удалить команду и разделяющую точку с запятой.

Пример вывода (в качестве входных данных для sed ):

5d; 6d; 9d;

Этот метод обеспечивает большую гибкость; вы можете установить N = 3 и использовать $ ((line + N)) в качестве аргумента printf.

Чтобы учесть редактирование на месте, я предполагаю, что sed поддерживает редактирование на месте -i .

1
17.05.2015, 19:36
0 ответов

Теги

Похожие вопросы