Как извлечь слово из строки, которая может / не может начинаться с одной кавычки - PullRequest
0 голосов
/ 09 июня 2019

Пример строки:

'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils'

cut -d' ' -f 1 string.txt дает мне

'kernel-rt|kernel-alt|/kernel-'

Но как нам продолжить, чтобы извлечь из него только «ядро»?

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Предполагается, что вам нужно только 3-е ядро ​​ (выделено жирным шрифтом), а не остальные

'kernel-rt | kernel-alt | / kernel -' 'headers | xen | firmware | tools | python | utils '

Вот как вы извлекаете его, используя одну команду awk (стандарт Linux gawk).

input="kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils"

echo $input|awk -F"|" '{split($3,a,"-");match(a[1],"[[:alnum:]]+",b);print b[0]}'

пояснение

-F"|" укажите разделитель полей |, поэтому требуется только 3-е поле

split($3,a,"-") разделить 3-е поле на -, левая часть присвоена a[1]

match(a[1],"[[:alnum:]]+",b) из a[1] извлекать последовательность буквенно-цифровой строки в b[0]

print b[0] выводить соответствующую строку.

Если вы хотите извлечь kernel из 2-го или 1-го полей,Измените $3 на $2 или $1.

1 голос
/ 09 июня 2019
$ cat file
'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils'
$
$ awk '{print $1}' file
'kernel-rt|kernel-alt|/kernel-'
$
$ awk '{gsub(/\047/,"",$1); print $1}' file
kernel-rt|kernel-alt|/kernel-
$
$ awk '{gsub(/\047/,""); split($1,f,/[|]/); print f[1]}' file
kernel-rt

и просто чтобы заставить вас думать ...

$ awk '{gsub(/\047|\.*/,"")}1' file
kernel-rt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...