【发布时间】:2013-10-19 23:19:54
【问题描述】:
我想在递归目录的某些文件中找到一个字符串,并用另一个字符串替换它。
我要查找的字符串是0x04030000&0xffff0000。
我要替换的字符串是0x80863a30。
我尝试了一些示例,但 grep 和 sed 会导致一些错误。
喜欢grep 说0xffff0000 command not found
我使用的是 Mac OS X 10.8.5
这是我尝试的命令和收到的错误:
localhost:~ User$ grep -rl 0x04030000&0xffff0000 /Users/Niresh/Desktop/TTT | xargs sed -i 's/0x04030000&0xffff0000/0x80863a30/g'
[4] 1166
-bash: 0xffff0000: command not found
grep: warning: recursive search of stdin
[4]+ Stopped grep -rl 0x04030000
这个命令也试过了,但是没用
localhost:~ Niresh$ mkdir TTT
localhost:~ Niresh$ echo "TTT 0x04030000&0xffff0000 bar" > TTT/bar
localhost:~ Niresh$ find TTT -type f -exec sed -i'' -e 's/0x04030000&0xffff0000/0x80863a30/g' {} \;
localhost:~ Niresh$ cat TTT/bar
TTT 0x80863a30 bar
localhost:~ Niresh$ TTT 0x80863a30 bar
-bash: TTT: command not found
但我也试过这个 sed -i'' -e 's/0x04030000&0xffff0000/0x80863a30/g' "这是我的文本文件路径"
但命令执行成功,但文本仍然存在
我阅读了 sed 的手册页 它显示了
错误 包含值为 0x5C (ASCII `\') 的字节的多字节字符可能是
在参数中被错误地视为行继续字符
a'',c'' 和 i'' commands. Multibyte characters cannot be used as
delimiters with thes'' 和 ``y'' 命令。
BSD 2005 年 5 月 10 日
【问题讨论】:
-
向我们展示您尝试过的命令并通过一些示例解释您的问题。
-
您使用的是什么操作系统?您需要提供一些信息。它是二进制文件,还是您正在查看文本十六进制转储?如果你想操作一个二进制文件,sed 和 grep 可能做不到。 awk 不能。 Perl 或其他脚本语言可以。如果你有一个二进制文件并且想要获取十六进制转储,找到它,进行替换,然后将结果转换回二进制文件,这可能会起作用。但是您可能会比需要的更难。
-
Mac OS X 10.8.5 我不知道如何获取十六进制转储?
-
您是否真的在寻找 string
0x04030000&0xffff0000,或者您是否真的想找到一组 4 或 8 个字节并用另一组 4 个字节替换它? -
是什么让你认为
TTT是一个命令?您创建了一个目录,名为TTT。
标签: bash replace sed terminal grep