У меня есть строка
00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256
и хочу извлечь слово qa
это следует -Dspring.profiles.active
.
У меня есть строка, сохраняют в файле text.txt только к демонстрации на нем.
Когда я делаю
grep -r -o "spring.profiles.active=" text.txt
Результат spring.profiles.active=
Это слово не всегда qa
, это могло быть prod
или dev
.
То, что я хотел бы сделать, является находкой слово spring.profiles.active
и после =
извлеките то слово.
Я хотел бы к сценарию оболочки это, потому что я использую слово для конфигурирования других объектов на сервере.
Действительно ли это возможно и если так, как я делаю это.
Вы можете использовать grep
с PCRE (-P
):
grep -Po 'spring.profiles.active=\K[^ ]+' <<<'.....string.....'
spring.profiles.active=
будет соответствовать этой подстроке буквально, \K
откажется от матча
[^ ]+
, выберет желаемую часть т.е. часть после spring.profiles.active=
, до следующего пространства
Для файла:
grep -Po 'spring.profiles.active=\K[^ ]+' file.txt
Пример:
% grep -Po 'spring.profiles.active=\K[^ ]+' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'
qa
<час> sed
взял бы подобную логику:
sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'.....string.....'
Пример:
% sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'
qa
Ошибки из-за неправильного обращения:
В Вашем сценарии Вы можете хотеть обращаться со случаем, где там не идет ни в какое сравнение, другими словами, где Ваша оригинальная последовательность не содержит spring.profiles.active=
. В вышеупомянутом sed
пример, Вы получаете целую оригинальную последовательность, которая могла создать проблемы:
% var="$(sed -r 's/.*spring.profiles.active=([^ ]+).*/\1/' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256')"
% echo $var
00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256
, Если Вы предпочитаете получать пустую последовательность, когда там не идет ни в какое сравнение, добавьте -n
выбор к эти sed
команда и p
выбор к sed
s
команда, как это:
% var="$(sed -rn 's/.*spring.profiles.active=([^ ]+).*/\1/p' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -XX:MaxPermSize=256')"
% echo $var
% var="$(sed -rn 's/.*spring.profiles.active=([^ ]+).*/\1/p' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256')"
% echo $var
qa
Тогда Вы можете проверить, пуст ли $var или нет.
Используя awk
awk -F"-Dspring.profiles.active=" '{sub(/ .*/,"",$2);print $2}' <<<'your_string'
или
awk -F"-Dspring.profiles.active=" '{sub(/ .*/,"",$2);print $2}' your_file
<час> Пример
% awk -F"-Dspring.profiles.active=" '{sub(/ .*/,"",$2);print $2}' <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256'
qa
Я брошу Perl один в соединение:
<<<'string' perl -lane '$F[3]=~s/.*?=//;print($F[3])'
-l
: позволяет автоматическую заканчивающую линию обработку. Это имеет два отдельных эффекта. Во-первых, это автоматически громко жует $ / (входной сепаратор отчета), когда используется с-n или-p. Во-вторых, это поручает $\\(сепаратор отчета продукции) иметь ценность octnum так, чтобы у любых заявлений печати был тот сепаратор включенным назад. Если octnum опущен, $наборов \\к текущей стоимости $/. -a
: включает способ авторазделения, когда он используется с-n или-p. Неявная команда разделения ко множеству @F сделана как первая вещь в неявном в то время как петля, произведенная-n или-p. n
: Perl причин, чтобы принять следующую петлю вокруг Вашей программы, которая заставляет его повторить по аргументам имени файла несколько как sed-n или awk:
LINE:
while (<>) {
... # your program goes here
}
-e
: может использоваться, чтобы войти в одну линию программы. % <<<'00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256' perl -lane '$F[3]=~s/.*?=//;print($F[3])'
qa