我有一个包含可读文件名的二进制文件,该文件名被'namexx:'和'xx:piece'所包含,在这两种情况下,x都是0-9之间的任意数字。
我在使用bash 5中的Mac上工作。
我尝试过使用sed:
cat filename.xxx | sed -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$/\1/'
问题在于正则表达式没有消耗整个文件,因此除了捕获的文件名之外,还会返回很多随机内容。
我尝试在sed前面加上LC_ALL=C,因为我在另一个答案中读到这样做可以将所有二进制数据视为可用通配符进行匹配,但是没有任何区别(可能我误解了)。
我还尝试过删除开头和结尾的锚点,但也没有任何区别。
*该文件是一个torrent文件,我只想提取文件名。我查看了bencoding并尝试提取文件名,但对于一个琐碎的任务来说似乎太复杂了。
sed -n -E 's/^.*name[0-9]{2}:(.*)[0-9]{2}:piece.*$/\1/p;'
? - Wiktor Stribiżewgrep -m 1 -o 'name[0-9]\{2\}:\(.*\)[0-9]\{2\}:piece' filename.xxx | sed 's/^name[0-9]\{2\}://' | sed 's/[0-9]\{2\}:piece$//'
- Wiktor Stribiżew