2011-05-18 38 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生成正確的字符串,如果在正則表達式中有反斜槓 - 我發現經常有這樣的反斜槓。

相關問題