Sed-以二进制值作为分隔符的模式匹配?

Sed-以二进制值作为分隔符的模式匹配?,sed,Sed,是否可以在模式匹配中使用二进制值 我有一个单行字符串,其中包含由二进制值1分隔的纯文本字段作为分隔符 是否可以使用sed将所有内容转换为二进制分隔符1 或者我应该使用awk \x1表示二进制值1的字符串示例: key1=value1\x1key2=value2\x1key3=value3 示例预期输出,key1和key2的值: value1 value2 您必须找到一种方法在那里的命令中以二进制形式获取\x1,因为sed不会解析它。例如,要将它们全部转换为新行,请执行以下操作: sed -e

是否可以在模式匹配中使用二进制值

我有一个单行字符串,其中包含由二进制值1分隔的纯文本字段作为分隔符

是否可以使用
sed
将所有内容转换为二进制分隔符1

或者我应该使用
awk

\x1
表示二进制值1的字符串示例:

key1=value1\x1key2=value2\x1key3=value3
示例预期输出,
key1
key2
的值:

value1 value2

您必须找到一种方法在那里的命令中以二进制形式获取\x1,因为sed不会解析它。例如,要将它们全部转换为新行,请执行以下操作:

sed -e "s/$(echo -e \\001)/\n/g" filename

编辑:以下是基于键列表打印值的几个选项,无法用
awk
找到更简洁的方法,但可能存在一个选项:

$ echo -e 'key1=value1\001key2=value2\001key3=value3' > test

$ sed 's/\x01/\n/g' test | awk -F= '{if ($1 == "key1" || $1 == "key2") print $2}'
value1
value2

$ sed 's/\x01/\n/g' test | perl -pe 's/((key1|key2)=(.*)|.*)/\3/'
value1
value2
您无法将所有内容匹配到第一个
\x1
,因为
sed
不支持非贪婪匹配,您可以选择使用不同的语言,或类似以下内容:

$ sed 's/\x01/\n/g' test | head -n 1
key1=value1
以下问题的答案有一个使用Perl正则表达式进行非贪婪匹配的好例子:

在希望字符
\001
出现的位置键入Control-A


如果正则表达式中有反斜杠,我会发现这比处理所有必要的转义要容易得多,以获得
echo
,从而生成正确的字符串—我发现经常有这样的反斜杠。

您到底想做什么?这将是有益的,看看一些预期的输出。我匹配的关键和输出值只针对特定的键,例如我只想看到输出“Value1 Value2”正确我需要非贪婪,似乎我可能会这样做在C++ +比任何Eclipse我的答案与一些潜在的解决方案,你需要做什么,但是如果C++是一个选项,那么最好在C++中这样做。