Shell

sed:匹配特殊顏色字元

  • December 25, 2020

我有一個包含特殊顏色編碼字元的文件:

$ cat zz
aaa.gpg
bbb.gpg
ccc.gpg

$ cat -A zz
^[[38;5;216maaa.gpg^[[00m$
^[[38;5;216mbbb.gpg^[[00m$
^[[38;5;216mccc.gpg^[[00m$

我需要使用sed命令來匹配結尾.gpg並將其刪除。所以,如果沒有特殊字元,我會使用:

cat zz | sed 's/\.gpg$//'

那麼如何將.gpg^[[00m$模式與匹配sed

我嘗試了所有可能的排列,但仍然不起作用。例如:

cat zz | sed 's/\.gpg\^\[\[00m$//'
c=$(printf '\\(\33\\[[0-9;]*m\\)*')

將儲存在$c匹配任意數量的圖形屬性設置序列(著色、粗體、反向影片…)的正則表達式中,也稱為 sgr(設置圖形再現)。

然後:

sed "s/${c}\.${c}g${c}p${c}g\(${c}\)\$/\5/"

將刪除.gpg包括散佈和前面的 SGR 序列的尾隨,但保留尾隨的序列(如您的\e[00m(sgr0) 以恢復預設圖形再現)。

為了刪除 ansi 序列(顏色和移動),我們可以按照以下方式執行一些東西

perl -pe 's/\e\[[0-9;]*[mGKHF]//g'

之後,事情就變得清晰多了……

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