Regex 我需要一个酥油的替代品
在我的系统(Debian)中安装Sublime Text 2时,我需要使用Regex 我需要一个酥油的替代品,regex,sed,command,Regex,Sed,Command,在我的系统(Debian)中安装Sublime Text 2时,我需要使用ghex通过编辑->转到字节来查找地址0x590ADC。之后,我需要更换32的编号33。所有这些都是为了解决退格键的问题 因此,我想知道是否有其他方法不使用ghex,我想使用命令行(sed-maybe)这样做,因为我使用bashscript来安装我的所有系统,包括像Sublime Text 2这样的软件 下面是一个sed命令,用于替换所有出现的3342,并替换for3242 sed 's/\x33\x42/\x32\x42
ghex
通过编辑->转到字节来查找地址0x590ADC
。之后,我需要更换32
的编号33
。所有这些都是为了解决退格键的问题
因此,我想知道是否有其他方法不使用ghex
,我想使用命令行(sed-maybe)这样做,因为我使用bashscript来安装我的所有系统,包括像Sublime Text 2这样的软件
下面是一个sed
命令,用于替换所有出现的3342
,并替换for3242
sed 's/\x33\x42/\x32\x42/g' sublime_text
我需要像上面这样的东西,但是在一个特定的地址,并且不再需要42
谢谢大家! 此模式也与33和33 42匹配
~s/\x33(\x42)?/\x32$1/g
sed
没有字节寻址,但使用标准工具很容易做到这一点
( cut -b1-5835484 file; printf "%c" 50; cut -b5835486- file )>newfile
给定足够的唯一上下文,可以找到一个表达式,该表达式可能在文件中只匹配一次(但在pessimal的情况下,您需要将整个文件作为上下文),因此可以执行以下操作
sed 's/\(\x01\xf3\x29\x02\)\x33\(\x42\x29\xea\x44)/\1\x32\2/' file >newfile
hexdump file |
sed 's/\(^0x0x590AD0 .. .. .. .. .. .. .. .. .. .. .. .. \)33/\132/' |
hexdump -v >newfile
也有可编程的十六进制编辑器,允许您使用简单的sed
类语言和字节寻址来实现这一点。或者,如果您有一个hextump程序,它读取自己的输入来重建一个新文件,请执行以下操作
sed 's/\(\x01\xf3\x29\x02\)\x33\(\x42\x29\xea\x44)/\1\x32\2/' file >newfile
hexdump file |
sed 's/\(^0x0x590AD0 .. .. .. .. .. .. .. .. .. .. .. .. \)33/\132/' |
hexdump -v >newfile
使用
bash
和dd
:
#!/bin/bash
function replace {
[[ $# -eq 4 && -f $1 ]] || return 1
local FILE=$1 ADDRESS=$2 EXPR=$3 LENGTH=$4
local BLOCK_SIZE=512
local BLOCKS=$(( ADDRESS / BLOCK_SIZE ))
local REM=$(( ADDRESS - (BLOCKS * BLOCK_SIZE) ))
{
[[ BLOCKS -gt 0 ]] && dd bs="$BLOCK_SIZE" count="$BLOCKS" status=none
[[ REM -gt 0 ]] && dd bs=1 count="$REM" status=none
printf "$EXPR"
dd bs=1 count="$LENGTH" of=/dev/null status=none
dd bs="$BLOCK_SIZE" status=none
} < "$FILE"
}
测试:
输出:
00000000 00 01 02 03 04 05 06 07 08 09 ff ff 0c 0d 0e 0f |................|
00000010 10 11 12 13 14 |.....|
当然,正确的解决方法是切换到Emacs<代码>一个稍微不那么麻烦的修复方法是将被黑客攻击的崇高文本打包到自己的repo中,然后从中安装。