LINUX.ORG.RU
решено ФорумAdmin

Удалить несколько строк в 56 файлах

 


0

2

В наличии 56 файлов:

# grep -r ultravnc ./data/local.com/ |wc -l
56
#
С тексом (представлена чаcть):
  greenshot:
    ensure: present
    provider: chocolatey
  ultravnc:
    ensure: present
    provider: chocolatey
  procexp:
    ensure: present
    provider: chocolatey
требуется удалить совпадение:
  ultravnc:
    ensure: present
    provider: chocolatey

★★★★★

Делается в два счета.

Крайне советую прочитать и выучить наизусть книгу «Джеффри Фридл: Регулярные выражения (Mastering Regular Expressions)». Страниц: 608

Jaeger1999 ★★★
()

ИМХО если тебе это нужно единоразово, то проще руками сделать за полчаса, чем полдня городить скрипт для этого.

Если же надо скриптом, то как-то так:

  1. Циклом идешь по всем файлам.
  2. Ищешь номер строки с первым вхождением: $ grep –n command fileg.txt | cut –d: -f1
  3. Удаляешь нужные строки, начиная с найденного порядкового номера: sed '3d' fileName.txt, где 3d — третья строка для примера.

Наверное, можно сделать это и просто sed’ом, если искать вхождение первой строки регекспом.

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)

# cd /var/lib/git/puppetfile/data/local.com
# for file in $(grep -ir ultravnc | grep '.yaml:' | awk -F: '{print $1}'); do sed -i -e '/ultravnc/,+2d' $file; done
#
petav ★★★★★
() автор топика
Ответ на: комментарий от petav

Пусть и не по теме, но вместо grep -ir ultravnc | grep '.yaml' (правильнее было бы в последнем grep -F '.yaml' или grep '\.yaml') намного проще писать: rg -t yaml ultravnc

emorozov
()
Ответ на: комментарий от Entmatix

А на 0-м уровне не ловит:

rain@walkbook:~$ find /tmp/testdir/ -type f 
/tmp/testdir/file1
/tmp/testdir/3/file1
/tmp/testdir/2/file1
/tmp/testdir/1/2/file1
/tmp/testdir/1/file1
rain@walkbook:~$ ls -1 /tmp/testdir/**/*
/tmp/testdir/1/file1
/tmp/testdir/2/file1
/tmp/testdir/3/file1

/tmp/testdir/1/2:
file1

YAR ★★★★★
()
Ответ на: комментарий от YAR

А если вложенные каталоги?

вложенные

При этом только первой вложенности. Ответ был соответствующим. Поиск всего сразу:

shopt -s globstar
ls -1 testdir/**/*.yaml
Entmatix
()
Последнее исправление: Entmatix (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.