Читайте от определенного момента до определенного символа

Скажем, у меня есть файл вроде этого:

foo bar foo bar foo bar foo bar something useful"foo bar foo bar" 

В принципе, я хочу знать, как я могу получить строку something useful само по себе, либо сохраненное в свой собственный файл, либо отображаемое только как результат.

Всегда будет одинаковое количество символов (33) перед something useful и всегда будет " сразу после него».

  • лучший способ найти подстроку целочисленного числа в perl
  • Как использовать команду «date» для отображения номера недели в году?
  • Стабильный сортировать файл по наличию упорядоченных подстрок на каждой строке
  • Тест Shell для поиска шаблона в строке
  • / bin / dash: проверьте, является ли $ 1 числом
  • Печать полной свободной памяти из `free -m`
  • Как я могу сделать графический график последовательности чисел из стандартного ввода?
  • Заменить строку после последней точки в bash
  • 5 Solutions collect form web for “Читайте от определенного момента до определенного символа”

    Попробуй это:

     cut -c 34- | cut -d '"' -f1 

    Первый cut удаляет первые 33 символа; во втором cut сохраняется только часть перед первым " .

    Вот версия GNU grep с использованием синтаксиса perl:

     grep -oP '.{32}\K[^"]*' 

    он загоняет первые 32 символа, отсекает его с \K и печатает остальное до первого " .

    Решение vim:

     vim test.txt -c '%s/\v.{32}(.{-})".*/\1' -c 'w output.txt' -c 'q!' 

    Сохраняет результат в output.txt , который, очевидно, может быть изменен.

    В выражении bash и расширении параметра

     $ nline="${line%%\"*}" #strip everything from first " seen to the end $ echo "${nline:32}" #print everything from offset 32 to the end 

    Вы можете использовать sed для выполнения своей задачи

     sed -e 's/^.\{32\}//;s/".*//' filename.txt 

    Это удаляет первые 32 символа и удаляет все после первого " .

    Эти замены будут выполняться в каждой строке файла. Чтобы применить это к определенной строке, используйте это:

     sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt 

    где linenumber – любое число.

     linenumber{ # on the linenumber-th line, do the following s/^.\{32\}// # remove the first 33 characters s/".*// # remove the first quote and everything following it } 
    Linux и Unix - лучшая ОС в мире.