Bash

tr -c ‘a-zA-Z一種−和一種−從a-zA-Z’ ’n’ 不替換所有補碼字元

  • November 2, 2015

編寫腳本我想替換除 alpha 之外的所有字元(

$$ a-zA-Z $$) 換行。根據定義,當使用 -c 標誌(設置補碼)時,tr 應該用 SET2 中指定的字元替換所有不在 SET1 中的字元。然而,它並沒有按預期工作……試試這個:

echo '[[:lower:]]' | tr -c '[a-zA-Z]' '\n'

我得到的輸出:

[[
lower
]]

可以看出,它替換了列而不是方括號,它應該替換它。

任何人都可以澄清這一點嗎?

tr不會以該正則表達式樣式解釋字元類。

[a-zA-Z]被解釋為一組[,從az和的字元範圍]

因此,它的補碼是字元集,包括所有字元,但從到和[的字元範圍。a``z``]

這就是為什麼[並且]沒有被替換。

要替換任何非字母字元,只需指定要a-zA-Z替換的集合的補碼:

echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'



lower



%

引用自:https://unix.stackexchange.com/questions/240324