示例字符串:
'kernel-rt|kernel-alt|/kernel-' 'headers|xen|firmware|tools|python|utils'
cut -d' ' -f 1 string.txt
给了我
'kernel-rt|kernel-alt|/kernel-'
但是我们如何进一步从中获取“内核”呢?
答案 0 :(得分:1)
$ 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
答案 1 :(得分:1)
假设您只需要第三个内核(粗体)
'kernel-rt | kernel-alt | / 内核-''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"|"
指定字段分隔符为|
,因此仅需要第三个字段
split($3,a,"-")
将第三个字段除以-
,左侧部分分配给a[1]
match(a[1],"[[:alnum:]]+",b)
从a[1]
中提取字母数字字符串序列到b[0]
print b[0]
输出匹配的字符串。
如果要从第二或第一字段中提取kernel
。将$3
更改为$2
或$1
。