如何按多个分隔符拆分字符串但保留方括号内的内容?
解决方案
你的问题在于原代码的分隔符设置会破坏方括号内的时间格式——冒号被全局用作分隔符,导致时间字符串被拆碎,无法得到预期结果。以下两种方法可以准确提取目标内容:
方法一:正则匹配捕获组
利用awk的match函数匹配完整字符串,直接捕获需要的内容:
awk '{match($0, /[0-9]+:([0-9]+) - \[(.*)\]/, arr); print arr[1] ", " arr[2]}'
说明:
- 正则表达式
/[0-9]+:([0-9]+) - \[(.*)\]/精准匹配输入格式:([0-9]+)捕获冒号后的数字100(.*)捕获方括号内的完整时间字符串
- 捕获的内容存入数组
arr,最后按要求格式输出两个值
方法二:分步拆分
先按固定分隔符拆分字符串,再分别处理前后部分:
awk -F ' - \\[' '{split($1, a, ":"); print a[2] ", " substr($2, 1, length($2)-1)}'
说明:
- 用
- [作为分隔符,将输入拆分为10:100和10/09/21:12:23:22]两部分 - 对第一部分用
split按冒号拆分,取第二个元素100 - 对第二部分用
substr去掉末尾的],得到完整时间字符串 - 最后将两部分用
,拼接输出
内容的提问来源于stack exchange,提问作者yxx
相关产品推荐
相关产品推荐

