请帮我解决这个问题
示例字符串:
error on port 1:2:4
帮助我使用grep命令,该命令会在该字符串中显示1:2:4的位置,将空格视为分隔符。
预期结果:
4:error on port 1:2:4
我试过grep -b" 1:2:4" filename ...但它返回
0:error on port 1:2:4
答案 0 :(得分:2)
此awk
应该有效:
line='error on port 1:2:4'
awk -v line="$line" -v s='1:2:4' '$1==s{print NR, line}' RS=' ' OFS=':' <<< "$line"
4:error on port 1:2:4
答案 1 :(得分:1)
您可以使用awk打印存储相应值的列号
$ echo 'error on port 1:2:4' | awk '{for (i=1;i<=NF;i++){if ($i=="1:2:4") print i}}'
4
要获得所需的结果,
$ echo 'error on port 1:2:4' | awk '{for (i=1;i<=NF;i++){if ($i=="1:2:4") print i":",$0}}'
4: error on port 1:2:4
答案 2 :(得分:1)
编辑:
我完全误解了这个问题而且它被接受了,我的道歉。
正确答案如下:
awk '{ for(i=1;i<=NF;i++){ if($i ~/1:2:4/){print i": "$0} } }' <<< "error on port 1:2:4"
4: error on port 1:2:4
正如评论中所建议的那样:
awk '{ for(i=1;i<=NF;i++){ if($i ~/1:2:4/){print i": "$0} } }' <<< "there's an error on port 1:2:4"
6: there's an error on port 1:2:4
答案 3 :(得分:0)
检查grep的版本。旧版本有一个错误(见下文)
如果您使用的是正确的版本,请尝试使用-o选项。这对我来说在v2.6.3。
$ grep -b -o '1:2:4' file 14:1:2:4
参考
Grep --byte-offset not returning the offset (Grep version 2.5.1)