2014-10-11 124 views
2

我有一个包含成千上万行的像这样的文件:如何编辑与shell脚本文件

0x7f29139ec6b3: W 0x7fff06bbf0a8
0x7f29139f0010: W 0x7fff06bbf0a0
0x7f29139f0014: W 0x7fff06bbf098
0x7f29139f0016: W 0x7fff06bbf090
0x7f29139f0036: R 0x7f2913c0db80

我想建立一个新文件其中每行只包含第二个十六进制数字(以粗体标出的部分)

我必须将所有这些十六进制数字放在一个C程序中的数组中。所以我试图在右侧创建一个只有十六进制数字的文件,以便我的C程序可以使用fscanf函数从修改后的文件中读取这些数字。

我想我们可以使用一些shell脚本来创建一个包含这些十六进制数字的文件吗? grep什么的?

回答

0

可以使用grep -oP命令:

grep -oP ' \K0x[a-fA-F0-9]*' file 
0x7fff06bbf0a8 
0x7fff06bbf0a0 
0x7fff06bbf098 
0x7fff06bbf090 
0x7f2913c0db80 
+0

这是真的,但为什么你需要一个自定义字段分隔符?为什么不写'awk'{print $ 3}'文件'(或'cut -f 3 file')? – ruakh 2014-10-11 18:37:22

+0

@anubhava,是的,它的作品。但我仍然有一个小问题。我有一些线,如:0x7f29139f0018:W 0x7fff06bbf088 0x7f29139f001a:W 0x7fff06bbf080 0x7f29139f001c:W 0x7fff06bbf078 0x7f29139f0036,R 0x7f2913c0db80 0x7f29139f003d:W 0x7f2913c0dcd8 0x7f29139f0047,R 0x7f2913c0dfb8,所以你看到有以 'W' 或“R线”。我给的前四行只有'W'。但是如何使这个工作包含'R'的行呢? – sps 2014-10-11 18:46:11

+0

请不要在评论中发布数据,编辑您的问题并将其发布到那里。你也没有告诉问题是什么? – anubhava 2014-10-11 18:48:41

1

您可以使用SED和编辑就地。对于符合 “R” 或任何其他字符使用

SED -i “S /.*:..// G” 文件

cat file 
0x7fff06bbf0a8 

0x7fff06bbf0a0 

0x7fff06bbf098 

0x7fff06bbf090 
0

因为它似乎你总是要选择第三场,最简单的方法是使用cut

cut -d ' ' -f 3 file 

awk

awk '{print $3}' file 
+1

'cut'默认情况下不会在空白处分割。如果分隔符恰好是一个单独的空格,那么'cut -d''-f 3'将会起作用,但是'cut -f 3'不会。 – 2014-10-11 19:02:43

+0

@MarkReed:Eep,你说得对!不知何故,我决定我们正在处理标签。将解决,谢谢。 – ruakh 2014-10-11 19:05:25

0

您可以将创造你想要的格式的新文件,该文件运行命令:somecommand < 的oldfile>newfile中。这将使原始文件保持原样并为您创建一个新的文件以供给您的C程序。

至于什么some命令应该是,你有多个选项。最简单的可能是awk

awk '{print $NF}' 

但你也可以做到这一点与sedgrepperlcut ...看到其他的答案为选择的尴尬。