如何用awk或sed提取文本中特定位置的sequence counter?
用awk/sed提取序列计数器的解决方案
方法一:使用awk
如果你的输入文件是input.txt,执行以下命令即可将提取到的计数器输出到output.txt:
awk '/8100/ { pos = index($0, "8100") + 4 + 48; print substr($0, pos, 2) }' input.txt > output.txt
命令解释:
/8100/:只处理包含8100标记的行index($0, "8100"):定位8100在当前行的起始位置+4:跳过8100本身的4个字符+48:往后偏移48个字符,找到序列计数器的起始位置substr($0, pos, 2):从目标位置截取2个字符(即序列计数器)并打印
方法二:使用sed
同样针对input.txt,执行以下命令:
sed -n 's/.*8100.\{48\}\(..\).*/\1/p' input.txt > output.txt
命令解释:
-n:关闭默认输出所有行的功能,只打印我们需要的内容s/.*8100.\{48\}\(..\).*/\1/p:.*8100:匹配8100之前的所有字符.\{48\}:匹配8100之后的48个任意字符\(..\):捕获接下来的2个字符(目标计数器)\1:将整行替换为捕获到的这2个字符p:打印替换后的结果
注意事项
如果你的标记是完整的<strong>8100</strong>而非单纯的8100,需要调整命令:
awk命令调整:
awk '/<strong>8100<\/strong>/ { pos = index($0, "<strong>8100<\/strong>") + 19 + 48; print substr($0, pos, 2) }' input.txt > output.txt这里
+19是因为<strong>8100</strong>的总长度为19,用于跳过整个标记字符串。sed命令调整:
sed -n 's/.*<strong>8100<\/strong>.\{48\}\(..\).*/\1/p' input.txt > output.txt
内容的提问来源于stack exchange,提问作者Wiedehopf8
相关产品推荐
相关产品推荐

