从二进制文件中提取字符串 - 正则表达式问题
extract string from binary file - regex issue
我有一个二进制文件,其中包含一个可读文件名*,由 'namexx:' 和 'xx:piece' 限定,其中 x 是 0-9 中的任何数字。
我正在 bash 5 中制作 Mac。
我试过使用 sed:
cat filename.xxx | sed -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$//'
问题是正则表达式没有使用整个文件,所以除了捕获的文件名之外,我还得到了很多随机返回的东西。
我已经尝试在 sed 前加上 LC_ALL=C
前缀,正如我在另一个答案中读到的那样,这会将所有二进制数据视为 'consumable' 和通配符,但这没有区别(我可能误解了).
我也试过删除开始和结束锚点,但这也没有什么区别。
*该文件是一个种子文件,我只想从中提取文件名。我 研究了编码并尝试提取文件名,但对于一项微不足道的任务来说它似乎太复杂了。
您可以使用
sed -n -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$//p;' filename.xxx
此处,-n
阻止打印行,p
打印匹配项(替换后剩余的内容)。
作为替代方案,您可以使用
grep -m 1 -o 'name[0-9]\{2\}:\(.*\)[0-9]\{2\}:piece' filename.xxx | \
sed -E 's/^name[0-9]{2}:(.*)[0-9]{2}:piece$//'
第一个 grep
只会提取第一个 (-m 1
) 匹配项,然后 sed
只会将捕获组值保留在结果中。
我有一个二进制文件,其中包含一个可读文件名*,由 'namexx:' 和 'xx:piece' 限定,其中 x 是 0-9 中的任何数字。
我正在 bash 5 中制作 Mac。
我试过使用 sed:
cat filename.xxx | sed -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$//'
问题是正则表达式没有使用整个文件,所以除了捕获的文件名之外,我还得到了很多随机返回的东西。
我已经尝试在 sed 前加上 LC_ALL=C
前缀,正如我在另一个答案中读到的那样,这会将所有二进制数据视为 'consumable' 和通配符,但这没有区别(我可能误解了).
我也试过删除开始和结束锚点,但这也没有什么区别。
*该文件是一个种子文件,我只想从中提取文件名。我 研究了编码并尝试提取文件名,但对于一项微不足道的任务来说它似乎太复杂了。
您可以使用
sed -n -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$//p;' filename.xxx
此处,-n
阻止打印行,p
打印匹配项(替换后剩余的内容)。
作为替代方案,您可以使用
grep -m 1 -o 'name[0-9]\{2\}:\(.*\)[0-9]\{2\}:piece' filename.xxx | \
sed -E 's/^name[0-9]{2}:(.*)[0-9]{2}:piece$//'
第一个 grep
只会提取第一个 (-m 1
) 匹配项,然后 sed
只会将捕获组值保留在结果中。