2016-08-16 80 views
0

我有两个文件说test1 & test2在某些随机位置有差异。所以我想要搜索测试1与测试2不同的字符位置&想要替换*在测试1中。但是,仅仅知道char的位置,约束就不知道char。 所以我试图使用cmp -b来获取不同的字节位置,但不能在sed中获取某些内容或者可以在字节位置替换char的任何位置,或者在比较中会给出行号的内容。以及不同的字符排列。因此,任何帮助(主要的约束是不能用char值替换,因为不希望文件中其他位置的更改只在该位置进行更改)。 sed第一次出现替换也将不起作用,因为第一次出现可能在不同位置之前。sed命令替换特定字节位置的字符

+0

你提的问题是非常不清楚,我只是无法弄清楚你是什么之后。我相信这是一个有效的问题,因为你提出了一个问题并试图展示你试图解决它的方式。这只是一个模糊的实际意图是什么。你能提供两个文件(1-2行文本)的例子和你之后的结果吗? – grochmal

回答

0

所以你只是想写一些字节在一些偏移量没有文件截断,也许dd会帮助?

设置:

$ cat f1 
aaaaaaaaaaaaaaaaaaaaaaaaa 
$ cat f2 
aaaaaaaaaaaaaaabaaaaaaaaa 

脚本:

if ! CMPOUT=`cmp -b f1 f2`; then 
    POS=`echo "$CMPOUT" | sed -r 's/^.*: byte ([0-9]+),.*$/\1/'` 
    echo -n '*' | dd of=f2 seek="$((POS-1))" bs=1 count=1 conv=notrunc 
fi 

结果:

$ cat f2 
aaaaaaaaaaaaaaa*aaaaaaaaa 
+0

感谢您的答案将尝试让你知道,这就是我想要的,很好地放在例子中,但我的文件是多行和差异可以在任何行中,文件也可以在MB中,也可以为此工作文件大小。 –

+0

@ Mahi.G:只要尝试一下,我认为它只适用于任何事情,包括二进制文件,只要'cmp'输出是预期的。 –

+0

谢谢,如果我想在文件2中使用dd之前在b之前加上b * aaaaaaaaaaaaaaa * baaaaaaaaa –