Điểm:0

Tách các chuỗi ANSI từ chuỗi thông qua mã bash-python

lá cờ in

Tôi cố gắng sử dụng bash để loại bỏ các chuỗi thoát màu ANSI khỏi một chuỗi nhưng không thành công. Tôi đã thử một số mã dựa trên regex.

#!/bin/bash

Xanh lam='\033[0;34m' # Xanh lam
Xóa='\033[0m' # Đặt lại văn bản

xóaColors(){
    cục bộ uncolor_string=''
    
    local import_row='nhập lại; \N'
    regex cục bộ_='(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]'
    local func_def_row='def escape_ansi(dòng): \n'
    cục bộ ansi_escape_row="ansi_escape=re.compile(r\'$regex_\') \n" 
    local return_row="return ansi_escape.sub('', line) \n"
    local print_row="print escape_ansi(line = '$1')"

    mã cục bộ="$import_row$func_def_row$ansi_escape_row$return_row$print_row"
    
    tiếng vang $(python -c $code)
}

str="Nhấn phím ${Blue}bất kỳ${Clear} để tiếp tục..."
tiếng vang -e "$str"

removeColors "$str"

Tôi vẫn nhận được mã dưới đây.

  Tệp "<chuỗi>", dòng 1
    nhập khẩu
         ^
Lỗi cú pháp: cú pháp không hợp lệ

Bạn có thể giúp tôi được không?

Cập nhật:

Tôi tìm thấy thư viện python dải-ansi.

xóaColors(){
    cục bộ uncolor_string=''
    cục bộ ansi_snippet="$1"
    
    echo "$(python3 -c " from strip_ansi import strip_ansi; print(strip_ansi(\"$ansi_snippet\"))")"
}

Tuy nhiên, ngay cả sau khi cài đặt nó, tôi nhận được lỗi bên dưới:

Traceback (cuộc gọi gần đây nhất cuối cùng):
  Tệp "<string>", dòng 1, trong <module>
ModuleNotFoundError: Không có mô-đun nào có tên 'strip_ansi'
lá cờ hr
Tôi thực sự không hiểu bạn đang cố gắng làm gì ở đây, tuy nhiên bạn cũng gặp lỗi tương tự từ `python -c import`, vì vậy có lẽ vấn đề *đầu tiên* là biến trình bao không được trích dẫn `$code`?
Bruno Henrique Peixoto avatar
lá cờ in
Đó là rất nhiều sự khởi đầu. Cảm ơn:)
lá cờ hr
... fwiw Tôi khuyên bạn nên sử dụng tài liệu ở đây cho những nội dung như thế này, thay vì cố trộn mọi thứ thành một chuỗi nhiều dòng. Xem ví dụ [Mã kết hợp trong tập lệnh shell. Biến chia sẻ](https://unix.stackexchange.com/questions/74244/hybrid-code-in-shell-scripts-sharing-variables)
pLumo avatar
lá cờ in
... hoặc một tệp script riêng biệt.
pLumo avatar
lá cờ in
`\n` không được hiểu theo nghĩa đen ở đây. Bạn có thể sử dụng `$'...'`. Tuy nhiên, bạn cũng có các lỗi gia tăng đối với `ansi_escape_row` và `return_row`. Và có lẽ các vấn đề khác là tốt. Tốt hơn là không trộn lẫn mã shell và python.
Bruno Henrique Peixoto avatar
lá cờ in
Tôi đã cập nhật câu hỏi với một số tiến bộ. Bạn có thể điều tra thêm bí ẩn này?
pLumo avatar
lá cờ in
Làm thế nào mà bạn cài đặt nó? Phiên bản `python` nào trả về `pip -V`. Nếu là 2.x, bạn có thể thử `pip3 install strip_ansi` hoặc `python3 -m pip install strip_ansi`
Bruno Henrique Peixoto avatar
lá cờ in
Phiên bản Pip: pip 22.0.3 từ $path (python 3.8) pip3 cài đặt dải-ansi: Yêu cầu đã được đáp ứng: dải-ansi trong $LOCAL_PATH
pLumo avatar
lá cờ in
Nhân tiện, tại sao bạn không sử dụng [`ansi2txt`](https://unix.stackexchange.com/questions/14684/removing-control-chars-include-console-codes-colors-from-script-output/527259# 527259) ?
pLumo avatar
lá cờ in
Bạn cài đặt `strip-ansi`, nhưng sử dụng `strip_ansi` với dấu gạch dưới. Tài liệu có hai phiên bản hướng dẫn cài đặt khác nhau?!
Bruno Henrique Peixoto avatar
lá cờ in
Thư viện ansi2txt có vẻ tuyệt vời, nhưng không hoạt động ví dụ: echo "$(echo "Nhấn \033[0;34nhiều phím\033[0m để tiếp tục..." | ansi2txt | col -b)" Bạn có thể chạy nó cho tôi, thưa ông?
pLumo avatar
lá cờ in
Vấn đề là `echo` , nó không đánh giá mã ansi. Sử dụng `echo -e` hoặc `printf` và nó hoạt động tốt.
Bruno Henrique Peixoto avatar
lá cờ in
TUYỆT VỜI! Cảm ơn ngài. :)
Điểm:1
lá cờ in

Dung dịch: tiếng vang -e "$1" | ansi2txt | col -b

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.