首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用sed从文件中提取ascii十六进制字符串

使用sed从文件中提取ascii十六进制字符串
EN

Stack Overflow用户
提问于 2014-06-16 00:09:55
回答 2查看 1.6K关注 0票数 1

我有一个像这样的文件:

代码语言:javascript
运行
复制
$ some random
$ text
00ab2c3f03$ and more
random text
1a2bf04$ more text
blah blah

代码是这样的:

代码语言:javascript
运行
复制
sed -ne 's/\(.*\)$ and.*/\1/p'  "file.txt" > "output1.txt"
sed -ne 's/\(.*\)$ more.*/\1/p' "file.txt" > "output2.txt"

这给了我这个00ab2c3f03和这个1a2bf04

因此,它提取从行开始到shell prompt的任何内容,并将其存储在文件中,两次用于两个不同的实例。

问题是文件有时看起来如下所示:

代码语言:javascript
运行
复制
/dir # some random
/dir # text
00ab2c3f03/dir # and more
random text
345fabd0067234234/dir # more text
blah blah

我想制造一个通用的萃取器

  • 从行的开头提取数据到'$‘OR '/’字符
  • 智能地提取从行开始到第一个hex数字的随机数量的随机non-hex数据。

但我对sed不太在行,我自己想出一个简单的解决办法.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 00:26:48

我想你想要这样的输出,

代码语言:javascript
运行
复制
$ cat file
$ some random
$ text
00ab2c3f03$ and more
random text
1a2bf04$ more text
blah blah
/dir # some random
/dir # text
00ab2c3f03/dir # and more
random text
345fabd0067234234/dir # more text
blah blah

$ sed -ne 's/\([a-f0-9]*\).* and more.*/\1/p' file
00ab2c3f03
00ab2c3f03

$ sed -ne 's/\([a-f0-9]*\).* more text.*/\1/p' file
1a2bf04
345fabd0067234234

您也可以尝试下面的GNU sed命令。由于您的输入中存在/,所以我将sed分隔符更改为~

代码语言:javascript
运行
复制
$ sed -nr 's~([a-f0-9]*)\/*\$*.* and more.*~\1~p' file
00ab2c3f03
00ab2c3f03

$ sed -nr 's~([a-f0-9]*)\/*\$*.* more text.*~\1~p' file
1a2bf04
345fabd0067234234

解释:

  • ([a-f0-9]*) -捕获所有六位数并将其存储到一个组中。
  • OP说,/$符号可能就出现在十六进制数字之后,所以在捕获组之后,正则表达式应该是\/*\$*(/ 0次或更多次,$ 0次或更多次)。
  • 第一个命令只适用于包含字符串and more的行。
  • 第二个只在包含more text的行上工作,因为op希望两个输出位于两个不同的文件中。
票数 1
EN

Stack Overflow用户

发布于 2014-06-16 00:52:28

这在我看来更好:

代码语言:javascript
运行
复制
sed -nr 's#([[:xdigit:]]+)[$/].*#\1#p' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24235210

复制
相关文章

相似问题

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