Bash
tr -c ‘a-zA-Z一種−和一種−從a-zA-Z’ ’n’ 不替換所有補碼字元
編寫腳本我想替換除 alpha 之外的所有字元(
$$ a-zA-Z $$) 換行。根據定義,當使用 -c 標誌(設置補碼)時,tr 應該用 SET2 中指定的字元替換所有不在 SET1 中的字元。然而,它並沒有按預期工作……試試這個:
echo '[[:lower:]]' | tr -c '[a-zA-Z]' '\n'
我得到的輸出:
[[ lower ]]
可以看出,它替換了列而不是方括號,它應該替換它。
任何人都可以澄清這一點嗎?
tr
不會以該正則表達式樣式解釋字元類。
[a-zA-Z]
被解釋為一組[
,從a
到z
和的字元範圍]
。因此,它的補碼是字元集,包括所有字元,但從到和
[
的字元範圍。a``z``]
這就是為什麼
[
並且]
沒有被替換。要替換任何非字母字元,只需指定要
a-zA-Z
替換的集合的補碼:echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n' lower %