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

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

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

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

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

  • Есть ли способ выполнить код в командной строке (PS1) без использования обратных ссылок?
  • Извлечь подстроку с символом вместо позиции
  • Как удалить английские символы из строки
  • Есть что-то вроде «split ()» JavaScript в оболочке?
  • Поиск и замена строки на определенных расширениях файлов
  • Bash Как я могу обернуть текст на определенное количество разделенных пространством входов
  • Сравнение переменной с буквами верхнего и нижнего регистра
  • строка bash для int
  • 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 } 
    Interesting Posts

    прекратить поиск srv записей

    MacBook Air (середина 2013 года) не может приостановиться должным образом после отсоединения от сети переменного тока

    Найти имена репозиториев из гитолитного информационного вывода

    Excecute Upstart скрипт после выполнения указанной службы

    Аутентификация LDAP на OpenBSD

    как обнаружить завершение видео в vlc

    Есть ли способ настроить vim для запуска внешних команд через cpanel jailshell?

    Как сделать файл перенаправления имеющим заказ

    Как я могу получить шрифт Terminus на gnome-terminator?

    В чем разница между командами ps и top?

    bc выводит двоичный код, как куски, разделенные пробелами

    доступ к подстрокам из строк в текстовом файле и их хранение

    Установите всю документацию TeXLive для установленных пакетов

    Разрешение обычным пользователям монтировать и извлекать устройства

    Получить общий размер нескольких файлов из переменной, содержащей список файлов

    Linux и Unix - лучшая ОС в мире.