【发布时间】:2016-06-17 06:40:57
【问题描述】:
我的 Makefile 中有这条规则,用 CRLFNUL替换 |||(三个管道字符;十六进制 7c 7c 7c) >(回车+换行+空;十六进制0d 0a 00):
rom.hex: rom.txt
hexdump -C rom.txt | cut -c10-60 > rom.hex
sed -i -e 's/ / /g' rom.hex
sed -i -e 's/7c 7c 7c/0d 0a 00/g' rom.hex
这在某些时候有效 - 但是,如果 hexdump 的输出将 7c 7c 7c 序列分成两行,则它不会被 sed 匹配。
替换必须与匹配的长度相同,以免移动后续字节。
【问题讨论】:
-
什么是
the string "|||"?编辑您的问题以阐明您的要求并发布一些简洁、可测试的示例输入和预期输出,因为现在甚至不清楚问题是什么 - 修改您的 makefile 中的命令链,以便它们在单独的行中编写或编写要从 makefile 调用的脚本对跨行分割的文本执行某些操作。问题是您的 makefile 中的拆分行还是您的 makefile 正在操作的文件中的拆分行? -
假设您需要在输出中保留所有个输入字节,请使用
hexdump -v,否则相邻相同行块中的重复项将打印为*,导致信息丢失。此命令说明了问题:hexdump -C <(printf '%*s' 64 ' ')
标签: string bash replace sed makefile