我有一个定界的字符串变量,如下所述。我想grep一个匹配的字符串。我在Internet上找到了一些可能的解决方案,但可悲的是,它们没有给我我所期望的结果。你能建议或纠正我吗?
Input: 123,src_12,234,456
1,23,34,src_23,4,56,7
src_14,12
12,3,5,src_5
Output: src_12
src_23
src_14
src_5
逻辑:我需要获取具有“ src_”的字符串。它并不总是列表中的第二项。位置可能会改变。可变长度,定界。
答案 0 :(得分:1)
使用简单的awk
解决方案:
awk 'match($0,/src_[0-9]+/){print substr($0,RSTART,RLENGTH)}' Input_file
或
awk '{sub(/.*src/,"src");sub(/\,.*/,"")} 1' Input_file
答案 1 :(得分:1)
使用bash:
while IFS="," read -a array; do
for element in "${array[@]}"; do
[[ $element =~ ^src_ ]] && echo "$element"
done
done <<< "$variable"
输出:
src_12 src_23 src_14 src_5
答案 2 :(得分:1)
使用tr
$ cat srinath.txt2
123,src_12,234,456
1,23,34,src_23,4,56,7
src_14,12
12,3,5,src_5
src_6,src_7,16,18
$ A=$(cat srinath.txt2)
$ tr ',' '\n' <<< "$A" | grep ^src
src_12
src_23
src_14
src_5
src_6
src_7
答案 3 :(得分:0)
使用Perl
$ cat srinath.txt
123,src_12,234,456
1,23,34,src_23,4,56,7
src_14,12
12,3,5,src_5
$ perl -nle ' /(src_\d+)/ and print $1 ' srinath.txt
src_12
src_23
src_14
src_5
如果同一行中有多个src_,则在下面使用
$ cat srinath.txt2
123,src_12,234,456
1,23,34,src_23,4,56,7
src_14,12
12,3,5,src_5
src_6,src_7,16,18
$ perl -nle ' while( /(src_\d+)/g ) { print $1 } ' srinath.txt2
src_12
src_23
src_14
src_5
src_6
src_7
如果在变量中,则
$ A=$(cat srinath.txt2)
$ perl -nle ' while( /(src_\d+)/g ) { print $1 } ' <<< "$A"
src_12
src_23
src_14
src_5
src_6
src_7
或
$ export A="123,src_12,234,456,1,23,34,src_23,4,56,7,src_14,12,12,3,5,src_5,src_6,src_7,16,18"
$ perl -nle ' while( /(src_\d+)/g ) { print $1 } ' <<< "$A"
src_12
src_23
src_14
src_5
src_6
src_7
$ perl -le ' $_=$ENV{A}; while( /(src_\d+)/g ) { print $1 } '
src_12
src_23
src_14
src_5
src_6
src_7
答案 4 :(得分:0)
这可能对您有用(GNU sed):
sed '/\n/!s/src_[^,]*/\n&\n/g;/^src_/P;D' file
用换行符括住所有候选字符串,然后使用sed命令P
和D
缩小每一行,仅打印前缀为src_
的候选字符串。
答案 5 :(得分:0)
一个简单的grep仅返回(-o
)个匹配的单词(-w
)
$ grep -wo 'src_[^,]*' file
src_12
src_23
src_14
src_5
答案 6 :(得分:0)
寻找^src_xxx,
,,src_xxx,
和,src_xxx$
,并且只打印不包含,
的匹配项。
sed -rn 's/.*(,|^)(src_[^,]*)(,|$).*/\2/p'