如何使用grep匹配前32个字符之后的指定模式?
筛选时间戳后含指定字符串的行
原命令cat file1.txt | grep -E '04:26'会匹配整行任意位置的04:26,所以时间戳里包含该字符串的行也会被选中。要仅匹配前32个字符(时间戳)之后的内容,可使用以下方法:
方法一:awk(推荐,直观易读)
利用substr函数截取每行第33个字符开始的内容,仅保留该子串匹配04:26的行:
awk 'substr($0, 33) ~ /04:26/' file1.txt
方法二:grep PCRE模式
通过正则表达式限定匹配范围,确保04:26出现在前32个字符之后:
grep -P '^.{32}.*04:26' file1.txt
^.{32}:匹配行首的任意32个字符(即时间戳部分).*04:26:匹配后续内容中包含04:26的部分
方法三:sed+grep组合
先过滤出目标子串所在的行号,再提取原文件对应行:
sed -n '/04:26/=' <(sed 's/^.\{32\}//' file1.txt) | xargs sed -n '{}p' file1.txt
内容的提问来源于stack exchange,提问作者vishnu m c
相关产品推荐
相关产品推荐

