Awk 如何从可能/可能不以单引号开头的字符串中提取单词

Awk 如何从可能/可能不以单引号开头的字符串中提取单词,awk,sed,grep,Awk,Sed,Grep,示例字符串: 'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils' cut-d'-f1 string.txt给了我 'kernel-rt|kernel-alt|/kernel-' 但我们如何进一步从中获得“内核” $ cat file 'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils' $ $ awk '

示例字符串:

'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils'
cut-d'-f1 string.txt
给了我

'kernel-rt|kernel-alt|/kernel-'
但我们如何进一步从中获得“内核”

$ 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
只是为了让你觉得

$ awk '{gsub(/\047|\.*/,"")}1' file
kernel-rt

假设您只需要第三个内核(粗体),而不需要其他内核

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

下面是如何使用单个命令
awk
(标准Linux
gawk
)提取它的

解释

-F“|”
指定字段分隔符为
|
,这样只需要第三个字段

拆分($3,a,“-”)
-
拆分第三个字段,左部分分配给
a[1]

match(a[1],“[:alnum:][]+”,b)
from
a[1]
将字母数字字符串的序列提取到
b[0]

打印b[0]
输出匹配的字符串


如果要从第2个或第1个字段提取
内核
。将
$3
更改为
$2
$1

假设您只需要第三个内核(粗体),而不需要其他内核

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

下面是如何使用单个命令
awk
(标准Linux
gawk
)提取它的

解释

-F“|”
指定字段分隔符为
|
,这样只需要第三个字段

拆分($3,a,“-”)
-
拆分第三个字段,左部分分配给
a[1]

match(a[1],“[:alnum:][]+”,b)
from
a[1]
将字母数字字符串的序列提取到
b[0]

打印b[0]
输出匹配的字符串


如果要从第2个或第1个字段提取
内核
。将
$3
更改为
$2
$1

不清楚,请务必在您的帖子中说明获取字符串的条件,然后使用GNU grep告知我们:
|grep-Po kernel
;-)当前输出中有三个
kernel
s:您希望得到哪一个?如果第一个不清楚,请尝试
grep-oP“^”?\K[^\s-]+“file
/
grep-oP“^”?\K[^\s-]+”在文章中提及获取字符串的条件,然后使用GNU grep告诉我们:
| grep-Po kernel
;-)当前输出中有三个
kernel
s:您希望得到哪一个?如果是第一个,请尝试
grep-oP“^”?\K[^\s-]+“文件
/
grep-oP“^”?\K[^\s-]+”