是否可以在sed
模式匹配中使用二进制值?Sed - 使用二进制值作为分隔符的模式匹配?
我有一行字符串,其中包含由二进制值1分隔的纯文本字段作为分隔符。
是否有可能使用sed
到二进制分隔符1的所有东西?我是否应该使用awk
?
例字符串,其中\x1
表示二进制值1:key1
key1=value1\x1key2=value2\x1key3=value3
例预期输出,价值观和key2
:
value1 value2
是否可以在sed
模式匹配中使用二进制值?Sed - 使用二进制值作为分隔符的模式匹配?
我有一行字符串,其中包含由二进制值1分隔的纯文本字段作为分隔符。
是否有可能使用sed
到二进制分隔符1的所有东西?我是否应该使用awk
?
例字符串,其中\x1
表示二进制值1:key1
key1=value1\x1key2=value2\x1key3=value3
例预期输出,价值观和key2
:
value1 value2
编辑:这里有几个用于打印基于密钥的列表上的值的选项,这不符合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
你所无法比拟的一切都交给因为sed
第一\x1
不支持非贪婪匹配,你的选择是使用不同的语言,或类似如下:
$ sed 's/\x01/\n/g' test | head -n 1
key1=value1
回答下列问题有使用Perl的正则表达式非贪婪匹配的一个很好的例子:
Non greedy regex matching in sed?
正确我需要非贪婪,看来我可能会用C++完成此任务比任何事情都快否则 – stefanB 2011-05-19 00:11:58
编辑我的答案与一些潜在的解决方案,你需要做什么,但如果这是一个选项,这样做在C++可能会更好。 – 2011-05-19 00:24:50
你必须找到一种方式来获得在二进制\ X1在命令那里sed不解析它。例如,要全部转换到新行:
sed -e "s/$(echo -e \\001)/\n/g" filename
类型控制-A的地步,你想输入的字符\001
到出现。
我会发现这比处理所有必要的转义要容易得多echo
生成正确的字符串,如果在正则表达式中有反斜杠 - 我发现经常有这样的反斜杠。
你究竟在做什么?看到一些预期的产出会有所帮助。 – 2011-05-18 23:29:36
我匹配键并输出特定键的唯一值,例如我只想看到输出“value1 value2” – stefanB 2011-05-18 23:55:33