是否可以在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