读取以下格式的文本文件:
"bbbbbb", #"old", "uio",
" sds # sds", #"old2",
" sds # sds", " a # b",#"old2",
# ' sds # sds',
我正在尝试使用正则表达式获取 0-N 子字符串之后的第一个
#
的索引,但我无法找到正确的索引。
字符串示例为
" sds # sds", #"old2",
代码是:
while IFS= read -r rline; do
echo $rline # prints a line from the file
index=$(grep -P '(^[^\"]*(["][^\"]*["][^\"]*){0,}[^\"]*#)' <<< "$rline" | awk '{print index($0, "#")-1}')
echo "The index of the first not in string # is: $index"
done < file.txt
它不断返回索引 = 6 而不是 14
如果字符串是
" sds # sds", " a # b",#"old2",
应该给出 23 但也给出 6。
您不需要在这里使用
grep | awk
。只需像这样单个 awk
就可以在任何 awk 上完成工作:
awk -F '"' '{
s = 0
for (i=1; i<=NF; ++i)
if (i%2 && (p = index($i, "#"))) {
print s+p
next
}
else
s += length($i)+1
}' file
11
15
24
1
PS:根据 awk 标准,这些索引从位置
1
开始。