Как насчет использования встроенной функции read 'bash' с символом периода в качестве разделителя для чтения каждого целого предложения в переменную, а затем заглавные буквы начального символа переменной? Что-то вроде
$ cat myfile
i am andrew. you
are jhon. here we are
forever.
$ while read -rd\. sntc; do printf "%s. " "${sntc^}"; done < myfile; printf "\n"
I am andrew. You
are jhon. Here we are
forever.
Для обработки нескольких терминаторов предложений, например. ? а также ! а также регулярный период, здесь используется другой подход с использованием «awk» - обратите внимание, что переменная RT, которая позволяет нам восстановить конкретный терминатор записи, который соответствует конкретному предложению, является расширением, которое может быть недоступно во всех вариантах «awk» '
$ cat myfile
i am andrew? you
are jhon. here we are
forever!
$ awk 'BEGIN{RS="[.!?]+[ \t\n]*"}; {sub(".", substr(toupper($0), 1,1), $0); printf ("%s%s", $0, RT)}' myfile
I am andrew? You
are jhon. Here we are
forever!
Обратите внимание, что вышеперечисленное выражение разделителя записей обрабатывает несколько последовательных разделителей ('!? !!! ') и необязательные конечные пробелы, которые нет в версии на основе чтения.
В качестве дополнительного улучшения попробуем добавить рудиментарное обращение с цитируемыми предложениями, изменив регулярное выражение RS еще раз и изменив sub так, чтобы в верхнем регистре был первый некатический символ:
[ f3], например
$ cat myfile
i am andrew. "are
you jhon?" 'here we are
forever!?'
$ awk 'BEGIN{RS="[.!?]+[\"'\'']?[ \t\n]*"}; {match($0, "[^\"'\'']"); sub("[^\"'\'']", substr(toupper($0),RSTART,1), $0); printf ("%s%s", $0, RT)}' myfile
I am andrew. "Are
you jhon?" 'Here we are
forever!?'
Вы можете использовать grep:
$ grep -m 1 TRAP-TYPE file
emuEventTrapInformative TRAP-TYPE
-m 1 сообщает grep выйти после первого совпадения. Чтобы получить только часть emuEventTrapInformative, вы можете просто удалить TRAP-TYPE и любые пробелы, предшествующие ему:
$ grep -m 1 TRAP-TYPE file | sed 's/ *TRAP-TYPE//'
emuEventTrapInformative
В качестве альтернативы вы можете использовать lookahead:
$ grep -Pom 1 '.*(?=TRAP-TYPE)' file
emuEventTrapInformative
[F9] сообщает grep только распечатать согласованную часть строки, а функция -P позволяет использовать регулярные выражения, совместимые с Perl, которые поддерживают lookaheads.
Вот версия sed:
sed -n 's/TRAP-TYPE//p' inp-file.txt
В примере, который вы указали, выход:
sed -n 's/TRAP-TYPE//p' inp-file.txt
emuEventTrapInformative
In ваш первоначальный вопрос, который вы запросили первый экземпляр TRAP-TYPE в файле. Если у вас более одного intance sed -n 's/TRAP-TYPE//p' | head -n1 будет делать трюк
Вот еще одна версия, которая извлекает несколько строк (на случай, если вам это нужно, когда-либо), если у вас есть несколько экземпляров TRAP-TYPE в файле.
$ awk 'BEGIN {RS="TRAP-TYPE"} NR>1{ print previous } {previous=$NF}' inp-file.txt
emuEventTrapInformative
someOtherString
Объяснение:
RS является разделителем записей. Мы делим весь текст на записи, используя TRAP-TYPE в качестве строки, затем печатаем последний элемент перед разделителем. Проблема в том, что последняя запись заканчивается фигурной скобкой. Поэтому, чтобы избежать этого, мы используем конструкцию NR>1{print previous}{previous=$NF}, чтобы мы могли игнорировать последнюю строку.
Пояснение
-- Traps
emuEventTrapInformative TRAP-TYPE
ENTERPRISE compaq
VARIABLES { scellNameDateTime,
shelfId,
shelfElementType,
shelfElementNum,
shelfErrorCode }
-- Traps
someOtherString TRAP-TYPE
ENTERPRISE compaq
VARIABLES { scellNameDateTime,
shelfId,
shelfElementType,
shelfElementNum,
shelfErrorCode }
И вот версия Perl:
< inputfile perl -ne 's/^ +(.*) +TRAP-TYPE/$1/&&print'
-n: помещает цикл while (<>) {[...]} вокруг скрипта -e: читает скрипт из аргументов Perl :
-n: помещает цикл while (<>) {[...]} вокруг скрипта /: запускает шаблон -e: читает скрипт из аргументов +: соответствует одному или нескольким символам (.*): соответствует и группирует любое количество символов перед одним или несколькими символами TRAP-TYPE: соответствует строке TRAP-TYPE /: останавливает шаблон / запускает заменяющую строку $1: заменяет захваченную группу /: останавливает замену строки / запускает модификаторы