linux - sed 命令替换特定字节位置的字符

标签 linux

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

最佳答案

所以你只想在不截断文件的情况下在某个偏移处写入一些字节,也许 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

关于linux - sed 命令替换特定字节位置的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982405/

相关文章:

linux - 抑制 du 命令中的 'Permission Denied' 警告

linux - 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

android - $ANDROID_HOME 的 Meteor 添加平台错误

linux - Bash:杀死子进程中的所有进程

android - 无法使用 lp 构建 3.10 内核?

linux - 嵌套 for 循环一年内几个月

linux - 如何在 Linux 中压缩和 tar 文件夹

c - 审查代码并评论 c linux 和网络专家

c - 为什么要无限期地等待 - timerfd_create?我哪里出错了?

linux - 在 Linux 上启动时启动脚本的最佳方式是什么