![sed 匹配和换行中的一些文本](https://linux22.com/image/67800/sed%20%E5%8C%B9%E9%85%8D%E5%92%8C%E6%8D%A2%E8%A1%8C%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E6%96%87%E6%9C%AC.png)
您希望65 72 62 65
在换行符中的序列之后可视化最多 10 个标记,但最少 1 个标记,其中虚拟数据源是hexdump -v /usr/bin/telnet
并且less
是查看器。代码
hexdump -v /usr/bin/telnet \
| sed 's/65 72 62 65[a-z0-9]\{1,10\}/&...\n/g' \
\
| less -s -M +Gg
不成功的输出如下,包含输入的开头,而它应该从第一个匹配项开始,并在其后仅包含几个字符,直到换行中的下一个匹配项
0000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00
...
想要的输出
65 72 62 65 000edf0 72 ...
65 72 62 65 72 6f 73 20 56 ...
65 72 62 65 72 6f 73 20 56 ...
...
如何在换行符中仅可视化匹配项及其后面的一些文本?
答案1
要仅打印字符串的匹配部分,您可以使用匹配所需字符串之前和之后的所有内容之一并将其替换为字符串:
sed 's/.*\(65 72 62 65 .\{1,10\}\).*/\1.../'
答案2
sed -n 's/65 72 62 65[[:hexdigit:] ]\{1,10\}/&...\n/;/\n/P'
你就快到了。你只需要以P
不同的方式打印它。该命令将从行首打印到指定字符串的行上第一个匹配项之外。如果您想反其道而行之,只从第一个匹配项的开头打印到行尾......
sed '/\n/P;//d;s/65 72 62 65[[:hexdigit:] ]\{1,10\}/\n&...\n/;D'
...那可行。