通過運行我得到的結果字符串「UTF-8」 我認爲用這個命令我將不得不字符串「TRALALA」下面返回爲什麼我不能在awk中使用字符串「?B?」作爲分隔符
echo "=?utf-8?B?tralala" | awk -F "?B?" '{print $2 }'
這是爲什麼? 爲了得到字符串「tralala」,我應該使用什麼分隔符?
通過運行我得到的結果字符串「UTF-8」 我認爲用這個命令我將不得不字符串「TRALALA」下面返回爲什麼我不能在awk中使用字符串「?B?」作爲分隔符
echo "=?utf-8?B?tralala" | awk -F "?B?" '{print $2 }'
這是爲什麼? 爲了得到字符串「tralala」,我應該使用什麼分隔符?
Awk分隔符不是字符串,它們是「字段分隔符」(因此變量名爲FS
),它是一種具有一些附加功能的擴展正則表達式類型(例如,不包含在方括號內的單個空字符作爲字段分隔符意味着所有連續的空白鏈都被分開,並且忽略每個記錄上的前導和尾隨空白)。
字符串,正則表達式和字段分隔符之間的區別非常重要,需要注意。你有時也會看到使用的「模式」這個詞 - 不要使用這個詞,它沒有(或者可能有太多的意思)。
一個?
是RE元字符,所以你需要告訴AWK不要被這些方法之一其視爲這樣你的情況:
$ echo "=?utf-8?B?tralala" | awk -F '[?]B[?]' '{print $2}'
tralala
$ echo "=?utf-8?B?tralala" | awk -F '\\?B\\?' '{print $2}'
tralala
你不嚴格需要做的第一個
$ echo "=?utf-8?B?tralala" | awk -F '?B[?]' '{print $2}'
tralala
$ echo "=?utf-8?B?tralala" | awk -F '?B\\?' '{print $2}'
tralala
但恕我直言,最好的清晰度和適應未來發展做吧:當它在一個RE的第一個字符?
,因爲它的元字符的功能是不適用的。
?
是一個正則表達式元字符,這意味着在前原子zero or one matches
。 (我很驚訝的awk沒有抱怨的一個起步,但。)
嘗試echo "=?utf-8?B?tralala" | awk -F '\\?B\\?' '{print $2 }'
代替。
('+'與以前的一個或多個原子相匹配。) – chepner 2014-12-05 17:31:25
兩個計數都正確。這是一個潦草的複製和粘貼,滑倒了一條線,我顯然沒有仔細閱讀。 – 2014-12-05 17:32:21
注意''''後'''''''作爲一個不情願的或非貪婪的量詞。 – 2014-12-05 17:36:18