ตัวละคร^[[37m
และ^[[0m
เป็นส่วนหนึ่งของลำดับหนี ANSI (รหัส CSI) ดูข้อมูลจำเพาะเหล่านี้ด้วย
ใช้ GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
(หรือ\x1B
) คือการหลบหนีอักขระพิเศษ
( sed
ไม่สนับสนุนทางเลือก\e
และ\033
)
\[
เป็นอักขระตัวที่สองของลำดับ escape
[0-9;]*
คือค่าสี regex
m
เป็นอักขระตัวสุดท้ายของลำดับ escape
⚠บน MacOS เริ่มต้นsed
คำสั่งไม่สนับสนุนอักขระพิเศษเช่น\e
เป็นแหลมออกโดยSLMและsteamer25ในการแสดงความคิดเห็น ใช้แทนที่คุณสามารถติดตั้งใช้gsed
brew install gnu-sed
ตัวอย่างที่มีบรรทัดคำสั่งของ OP: (OP หมายถึงโปสเตอร์ต้นฉบับ)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Haleแนะนำให้ลบลำดับ escape อื่น ๆ ทั้งหมดโดยใช้[a-zA-Z]
แทนที่จะเป็นตัวอักษรm
เฉพาะของโหมดกราฟิก (สี) escape แต่[a-zA-Z]
อาจกว้างเกินไปและสามารถลบได้มากเกินไป MichałFaleńskiและMiguel Motaเสนอที่จะลบลำดับการหลบหนีบางอย่างโดยใช้[mGKH]
และ[mGKF]
ตามลำดับ ต้องระบุBritton KerinK
ด้วยนอกเหนือจากเพื่อm
ลบสีออกจากgcc
ข้อผิดพลาด / คำเตือน (อย่าลืมเปลี่ยนเส้นทางgcc 2>&1 | sed...
)
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
การใช้ perl
รุ่นของการsed
ติดตั้งบนระบบปฏิบัติการบางระบบอาจมีข้อ จำกัด (เช่น macOS) คำสั่งperl
มีข้อได้เปรียบในการติดตั้ง / อัปเดตระบบปฏิบัติการได้ง่ายขึ้น อดัมแคทซ์แนะนำให้ใช้\e
(เหมือน\x1b
) ในPCRE
เลือก regex ของคุณขึ้นอยู่กับจำนวนคำสั่งที่คุณต้องการกรอง:
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
ตัวอย่างที่มีบรรทัดคำสั่งของ OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
การใช้
ตามที่ระบุโดยข้อคิดเห็นของ Stuart Cardallsed
บรรทัดคำสั่งนี้ถูกใช้โดยโครงการUltimate Nginx Bad Bot (1,000 ดาว) เพื่อล้างรายงานอีเมล ;-)
more
หรือless -R
ซึ่งสามารถแปลรหัสการยกเว้นเป็นสีแทนที่จะเป็นตัวแก้ไขข้อความ