Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: bash скрипт "Удаление по шаблону"  (Прочитано 2182 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Доброго времени суток!
Дано:
1. файл log1 c примерным содержимым:
Цитировать
девушка
человек
крокодил
обезьяна
2. файл ss c примерным содержимым:
Цитировать
http://крокодил.html
http://ya.ru
....
и т.п.
Нужно пройтись по файлу ss и удалить строки содержащие в файле log1.
есть кусок скрипта:
rm 1.log 2.log
while read line;do
 sed -i '/"$line"/d' /home/angel/ss
 [[ $? -eq 0 ]] && echo $line >> 1.log || echo $line >> 2.log
done < /home/angel/log1

если пишу: sed -i '/Текст/d' /home/angel/ssто бозару нет находит в файле "SS" строку содержащию слово "Текст" и удоляет эту строку.

Вопрос: Как заставить sed брать поочерёдно из файла log1 шаблон строку и икать её в файле SS?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт \"Удаление по шаблону\"
« Ответ #1 : 27 Мая 2015, 10:49:41 »
Код: (bash) [Выделить]
sed -i "/$line/ d" /home/angel/ssНасколько большой файл log1?
Код: (bash) [Выделить]
sed -ir "/$(sed ':1;$!N;s/\n/|/;t1' /home/angel/log1)/ d" /home/angel/ss
Код: (bash) [Выделить]
sed -ir "/$(sed -z 'y/\n/|/;s/|$//' /home/angel/log1)/ d" /home/angel/ss
Код: (bash) [Выделить]
sed '/^\s*$/d;s-^-/-;s-$-/ d-' /home/angel/log1 | sed -f - /home/angel/ss
Код: (bash) [Выделить]
grep -vFf /home/angel/{log1,ss} > /home/angel/new_ss
« Последнее редактирование: 27 Мая 2015, 11:35:03 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #2 : 27 Мая 2015, 11:51:25 »
2000 строк

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #3 : 27 Мая 2015, 11:58:49 »
Последние 2 работают с любым количеством. Остальные — можно попробовать.
P.S. Я б попробовал через time ... — какой быстрее справится
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #4 : 27 Мая 2015, 12:16:04 »
прошу прощения а в пред последнем пропущен какой ключ?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #5 : 27 Мая 2015, 13:55:56 »
-i --in-place имеете ввиду?
Код: (bash) [Выделить]
sed '/^\s*$/d;s-^-/-;s-$-/ d-' /home/angel/log1 | sed -if - /home/angel/ss
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #6 : 27 Мая 2015, 14:04:11 »
Да, выдаёт ошибку:
sed: -e выражение #1, символ 1: неизвестная команда: `-'

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #7 : 27 Мая 2015, 15:47:46 »
O, я и сам не знал, что обязательно разделять:
Код: (bash) [Выделить]
sed '/^\s*$/d;s-^-/-;s-$-/ d-' /home/angel/log1 | sed -i -f - /home/angel/ss
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #8 : 27 Мая 2015, 21:52:33 »
вопрос впринцепи решон. но еще если несложно маленькое дополнение. можно ли вывести какие именно строки удалил и сколько их нашол в количестве?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #9 : 28 Мая 2015, 01:33:04 »
Тогда зачем Вам редактирование in-place? Сохраните оригинал и сравните с новым файлом.
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн _A_n_G_e_L_

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #10 : 30 Мая 2015, 23:16:18 »
мне нужно было удолить все в ss по шаблону log1 и просто для себя получить лог сколько нашлось строк и каких для удоления:) спасибо вам за ответы.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: bash скрипт "Удаление по шаблону"
« Ответ #11 : 31 Мая 2015, 01:22:17 »
Код: (bash) [Выделить]
sed '/^\s*$/d;s-^-/-;s-$-/ d-' /home/angel/log1 | sed -i.bak -f - /home/angel/ss
comm -13 --nocheck-order /home/angel/ss{,bak} | tee /dev/stderr | wc -l
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.