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


Автор Тема: [Решено][bash] Удалить часть файла до определённой строки  (Прочитано 18380 раз)

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

Оффлайн Дмитрий Бо

  • Автор темы
  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Есть файл, который где-то в середине себя содержит некоторое ключевое слово.

Как мне удалить из файла все строки до этого слова?

Пока курю man awk sed cut, но надежда слабая, они работают со стоками и вряд ли представляют, что такое "файл". tail дубовый, регэкспы не умеет.

Можно загнать в цикл. Или нагрепать номер нужной строки, вычесть из общего количества и результат отдать tail'у, но это не слишком изящно.
« Последнее редактирование: 09 Февраля 2011, 15:43:52 от Дмитрий Бо »

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
stringZ=abcABC123ABCabc

echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc

echo ${stringZ:7:3}                          # 23A
                                   
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Дмитрий Бо

  • Автор темы
  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
> echo ${stringZ:0}

Круто, но не тот случай. Строк много, а номер нужной я заранее не знаю.

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz}           # xyzABC123ABCabc
                                  # Замена первой подстроки 'abc' строкой 'xyz'.

echo ${stringZ//abc/xyz}          # xyzABC123ABCxyz
                                  # Замена всех подстрок 'abc' строкой 'xyz'.
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Дмитрий Бо

  • Автор темы
  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
И как это мне поможет?

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
аа туплю батенька совсем туплю... тебе sed нужен, я уже делал такое, вечерком выложу

Пользователь решил продолжить мысль 09 Февраля 2011, 15:16:29:
тогда что то вроде этого:
sed -e 's/^.\{test\}//'
удалит все до test, но я не проверял негде сейчас вод Win сижу на работе
« Последнее редактирование: 09 Февраля 2011, 15:16:29 от Чистый »
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Курите sed внимательнее, кажется, то, что Вам нужно, делается в одну команду.

http://www.grymoire.com/Unix/Sed.html#uh-29

sed '1,/keyword/ d' < fileудалит все с первой строки до ключевого слова keyword
« Последнее редактирование: 09 Февраля 2011, 15:20:48 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Дмитрий Бо

  • Автор темы
  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Спасибо! Нашёл. Работает.

Ещё пригодилось sed '/keyword/,$ d' < file — отрубает хвост.

 

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