2011-05-18 37 views
2

是否可以在sed模式匹配中使用二进制值?Sed - 使用二进制值作为分隔符的模式匹配?

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

是否有可能使用sed到二进制分隔符1的所有东西?我是否应该使用awk

例字符串,其中\x1表示二进制值1:key1

key1=value1\x1key2=value2\x1key3=value3 

例预期输出,价值观和key2

value1 value2 
+1

你究竟在做什么?看到一些预期的产出会有所帮助。 – 2011-05-18 23:29:36

+0

我匹配键并输出特定键的唯一值,例如我只想看到输出“value1 value2” – stefanB 2011-05-18 23:55:33

回答

3

编辑:这里有几个用于打印基于密钥的列表上的值的选项,这不符合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?

+0

正确我需要非贪婪,看来我可能会用C++完成此任务比任何事情都快否则 – stefanB 2011-05-19 00:11:58

+0

编辑我的答案与一些潜在的解决方案,你需要做什么,但如果这是一个选项,这样做在C++可能会更好。 – 2011-05-19 00:24:50

0

你必须找到一种方式来获得在二进制\ X1在命令那里sed不解析它。例如,要全部转换到新行:

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

类型控制-A的地步,你想输入的字符\001到出现。

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

相关问题