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

时间:2019-06-09 14:30:51

标签: awk sed grep

示例字符串:

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

cut -d' ' -f 1 string.txt给了我

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

但是我们如何进一步从中获取“内核”呢?

2 个答案:

答案 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