Bash ./获取长度为8个字符的子集

时间:2018-10-18 11:05:59

标签: bash

我有以下输入内容:

line="before,myinput1,after" 

myinput1也可以是第一个或最后一个。例如:line="myinput1,after"line="before,myinput1"

我正在尝试仅获取myinput1值(可以更改)。尝试过这个:

line | grep -o -E ',.{0,7}.,'

,其返回以下值:,myinput1,。如果值是第一个或最后一个,则该问题将不起作用,因为缺少,

还有其他方法吗?

3 个答案:

答案 0 :(得分:0)

要在逗号分隔的字符串中捕获8个字符的字段,可以使用awk

awk -v RS=, 'length()==8' <<< "$line" 

RS将记录分隔符设置为逗号,

awk length()函数给出当前记录的大小。

答案 1 :(得分:0)

使用grep,用于8个字符的正则表达式(假设您只需要8个字符串)为\w{8}。使用OR运算符|,可以将所需的三种情况(行首,行尾和行中某处)表示为:

egrep -o ',\w{8},|^\w{8},|,\w{8}$'

答案 2 :(得分:0)

使用bash:

(IFS=',';set -- $line;for i;do [ ${#i} -eq 8 ] && echo $i ;done)