получить часть значения определенного слова в AIX

получить часть значения определенного слова в AIX

хотите найти строку и нужна часть строки

файл.txt:

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKADSRATIO

при использовании команды ниже sedполучаем дополнительное значение

Выход:

bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt

**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,

Мне нужно толькоTEMP_ESM.EMPASGMTAMPTMPRTRSE

решение1

sed -n 's/.*$$ENV$$_//p' example.txt

Команда s/pattern/replacement/ищет sedвсе строки на наличие регулярного выражения patternи заменяет его. При пустой замене шаблон удаляется, что, кажется, то, что вам нужно.

Конечный pвывод выводит измененную строку, в то время как весь вывод по умолчанию подавляется опцией -n.

решение2

С GNU grep, если он собран с (новой) поддержкой PCRE (как это часто бывает в системах GNU и BSD):

grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file

извлечет все последовательности символов, кроме пробелов и запятых, которые следуют за каждым вхождением $$ENV$$_.

Если GNU grepнедоступен, то же самое можно сделать с помощью perl( Pв PCRE):

perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file

Или если perlверсия слишком старая для поддержки \K:

perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file

решение3

sedподход:

sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
  • \([^[:space:],]*\)- 1-я захваченная группа, содержащая символы, за исключением пробелов [:space:]и запятых,

Выход:

TEMP_ESM.EMPASGMTAMPTMPRTRSE

решение4

sed '/.*$$ENV$$_/!d;s///;s/,.*//'
  • /.*$$ENV$$_/!d: Если строка не содержит $$ENV$$_, вывод не производится, дальнейшая обработка не производится
  • s///: удалить соответствующий шаблон
  • s/,.*//: удалить запятую и все, что после

Связанный контент