首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取字符串中模式的字符位置?

如何获取字符串中模式的字符位置?
EN

Stack Overflow用户
提问于 2011-12-16 10:05:21
回答 5查看 1.3K关注 0票数 0

我有一个日志,看起来像这样:

代码语言:javascript
运行
复制
2011-12-15 23:37      8920   xxxxxxxxxxxx
2011-12-16 00:06      8979   xxxxxxxxxxxx
2011-12-16 00:40      8757   xxxxxxxxxxxx
2011-12-16 00:43      8795   xxxxxxxxxxxx
2011-12-16 00:43      8795   xxxxxxxxxxxx
2011-12-16 01:17    174050   xxxxxxxxxxxx
2011-12-16 01:19    139883   xxxxxxxxxxxx
2011-12-16 01:34    174129   xxxxxxxxxxxx

我需要解析这个日志,但我唯一关心的部分是"xxxxxxxxxxxx";"xxxxxxxxxxxx“可以是任何东西,但它总是具有相同的字符数。

目前,我正在使用它来解析我的日志:

代码语言:javascript
运行
复制
VAR=`awk NR==$i log.log | cut -c30-45`

但这是假设第三列不会更改字符数,例如"8920",但如您所见,有三个日志超过四个字符,例如"174129“。除了第三列之外的所有内容都将具有相同的字符数,第四列将有所不同,但字符数将不同。

我需要得到第四列中的内容,所以我想也许我可以得到"xxxxxxxxxxxx“开始的字符位置,然后我就可以做cut -c$STRING_POS-67了。在PHP中有一个叫做strpos的函数,这个函数“返回大堆字符串中第一次出现的指针的数字位置”,这正是我需要的,有没有类似这样的东西可以在bash中使用呢?

@shellter -我需要一些非常快速的东西,所以我做了很多谷歌搜索,找到了一些零碎的东西,然后把它们组合在一起。

代码语言:javascript
运行
复制
NUM_LINES=`awk -F, 'END{print NR}' log.log`
while [ $i -le $NUM_LINES ]
do    
    VAR=`awk -v a=$i 'NR==a{print $4}' log.log | cut -c28-58`

    # Do stuff with $VAR

    i=$(( $i + 1 ))

done
EN

Stack Overflow用户

发布于 2011-12-16 11:55:19

这可能对你有用:

代码语言:javascript
运行
复制
VAR=$(sed 's/.*[0-9]   //' log.log)
票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8529003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档