Score:0

แยกลำดับ ANSI จากสตริงผ่านโค้ด bash-python

ธง in

ฉันพยายามใช้ bash เพื่อแยกลำดับการหลีกสี ANSI ออกจากสตริงโดยไม่สำเร็จ ฉันลองใช้โค้ดที่ใช้ regex แล้ว

#!/bin/bash

สีน้ำเงิน='\033[0;34m' # สีน้ำเงิน
Clear='\033[0m' # รีเซ็ตข้อความ

ลบสี (){
    uncoloured_string='' ท้องถิ่น
    
    local import_row='นำเข้าใหม่; \n'
    regex_='(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]'
    local func_def_row='def escape_ansi(บรรทัด): \n'
    ansi_escape_row ท้องถิ่น = "ansi_escape=re.compile(r\'$regex_\') \n" 
    local return_row="return ansi_escape.sub('', บรรทัด) \n"
    local print_row="print escape_ansi(line = '$1')"

    รหัสท้องถิ่น = "$import_row$func_def_row$ansi_escape_row$return_row$print_row"
    
    เสียงสะท้อน $(python -c $code)
}

str="กด ${Blue}ปุ่มใดก็ได้${Clear} เพื่อดำเนินการต่อ..."
เสียงสะท้อน -e "$str"

ลบสี "$str"

ฉันยังคงได้รับรหัสด้านล่าง

  ไฟล์ "<string>" บรรทัดที่ 1
    นำเข้า
         ^
SyntaxError: ไวยากรณ์ไม่ถูกต้อง

คุณสามารถช่วยฉันได้ไหม?

อัปเดต:

ฉันพบห้องสมุดหลาม แถบ-ansi.

ลบสี (){
    uncoloured_string='' ท้องถิ่น
    ansi_snippet ท้องถิ่น = "$1"
    
    echo "$(python3 -c "จาก strip_ansi นำเข้า strip_ansi; พิมพ์(strip_ansi(\"$ansi_snippet\"))")"
}

อย่างไรก็ตาม แม้หลังจากติดตั้งแล้ว ฉันได้รับข้อผิดพลาดด้านล่าง:

Traceback (การโทรครั้งล่าสุดล่าสุด):
  ไฟล์ "<string>" บรรทัดที่ 1 ใน <โมดูล>
ModuleNotFoundError: ไม่มีโมดูลชื่อ 'strip_ansi'
hr flag
ฉันไม่เข้าใจจริงๆ ว่าคุณกำลังพยายามทำอะไรที่นี่ อย่างไรก็ตาม คุณจะได้รับข้อผิดพลาดเดียวกันจาก `python -c import` ดังนั้นบางทีปัญหา *ประการแรก* คือตัวแปรเชลล์ที่ไม่มีเครื่องหมายคำพูด `$code`?
Bruno Henrique Peixoto avatar
in flag
เป็นจุดเริ่มต้นอย่างมาก ขอบคุณ:)
hr flag
... fwiw ฉันขอแนะนำให้ใช้ a here เอกสารสำหรับสิ่งนี้แทนที่จะพยายามรวมทุกอย่างเป็นสตริงหลายบรรทัด ดูตัวอย่าง [Hybrid code in shell scripts. ตัวแปรที่ใช้ร่วมกัน](https://unix.stackexchange.com/questions/74244/hybrid-code-in-shell-scripts-sharing-variables)
pLumo avatar
in flag
... หรือไฟล์สคริปต์แยกต่างหาก
pLumo avatar
in flag
`\n` ในที่นี้ไม่ได้ถือตามตัวอักษร คุณสามารถใช้ `$'...'` อย่างไรก็ตาม คุณยังมีข้อผิดพลาดที่เพิ่มขึ้นสำหรับ `ansi_escape_row` และ `return_row` และน่าจะเป็นประเด็นอื่นๆด้วย ดีกว่าที่จะไม่ผสมเชลล์และรหัสหลาม
Bruno Henrique Peixoto avatar
in flag
ฉันอัปเดตคำถามด้วยความคืบหน้าบางอย่าง คุณสามารถตรวจสอบปริศนานี้เพิ่มเติมได้หรือไม่?
pLumo avatar
in flag
คุณติดตั้งได้อย่างไร `python` เวอร์ชันใดที่ส่งคืน `pip -V` หากเป็น 2.x คุณสามารถลองใช้ `pip3 install strip_ansi` หรือ `python3 -m pip install strip_ansi`
Bruno Henrique Peixoto avatar
in flag
รุ่น Pip: pip 22.0.3 จาก $path (python 3.8) pip3 install strip-ansi: ตอบสนองความต้องการแล้ว: strip-ansi ใน $LOCAL_PATH
pLumo avatar
in flag
Btw ทำไมคุณไม่ใช้ 527259) ?
pLumo avatar
in flag
คุณติดตั้ง `strip-ansi` แต่ใช้ `strip_ansi` กับเครื่องหมายขีดล่าง เอกสารประกอบมีคำแนะนำในการติดตั้งสองเวอร์ชันที่แตกต่างกัน!
Bruno Henrique Peixoto avatar
in flag
ห้องสมุด ansi2txt นั้นดูดี แต่ใช้ไม่ได้กับตัวอย่าง: echo "$(echo "กด \033[0;34หลายคีย์\033[0m เพื่อดำเนินการต่อ..." | ansi2txt | col -b)" คุณช่วยเรียกใช้ให้ฉันได้ไหม
pLumo avatar
in flag
ปัญหาคือ `echo` มันไม่ประเมินรหัส ansi ใช้ `echo -e` หรือ `printf` และใช้งานได้ดี
Bruno Henrique Peixoto avatar
in flag
ยอดเยี่ยม! ขอบคุณ คุณครับ :)
Score:1
ธง in

สารละลาย: เสียงสะท้อน -e "$1" | ansi2txt | คอลัมน์ -b

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา