ตัวละคร^[[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ในการแสดงความคิดเห็น ใช้แทนที่คุณสามารถติดตั้งใช้gsedbrew 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ซึ่งสามารถแปลรหัสการยกเว้นเป็นสีแทนที่จะเป็นตัวแก้ไขข้อความ