স্টাডআউট এবং পাইপ এবং ফাইল এবং স্টডআউটের বাইরে রঙের কোডগুলি কীভাবে স্ট্রিপ করা যায়


14

আমার একটি প্রোগ্রাম রয়েছে যা এতে printfকিছু tputমিশ্রিত ব্যবহার করে এবং আমি আউটপুটটি স্টাডআউটের পাশাপাশি একটি ফাইল পাইপ করতে চাই। আমি sedআমার স্ক্রিপ্টে কোনও অপ্রয়োজনীয় নির্ভরতা চাই না বলে আমি ব্যবহার করতে পছন্দ করব। আমি এখন পর্যন্ত যা পেয়েছি তা এখানে।

printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log

এটির সাথে একমাত্র ইস্যুটি হ'ল আমার লগ ফাইলটি রঙিন আউটপুটগুলির সমস্ত যেমন পাচ্ছে ...

^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m

আমি এটি পেতে চাই | Sourcing files...



@ স্টাফেনচাজেলাস, আমি আপাতত পার্ল স্ক্রিপ্টগুলির কোনও ব্যবহার না করার চেষ্টা করছি, এবং এমনকি sedবিকল্পগুলি কাজ করছে বলে মনে হচ্ছে না।
iamnewton

উত্তর:


12

আউটপুট থেকে রঙ অপসারণ অনুসারে আপনার কমান্ডটি হওয়া উচিত:

printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" |\
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" |tee install.log
w/o "-r"
sed "s/\x1B\[\([0-9]\{1,2\}\(;[0-9]\{1,2\}\)\?\)\?[mGK]//g"

সুবিধার কারণে আপনি একটি উপাধি তৈরি করতে পারেন /etc/profile

alias stripcolors='sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"'
w/o '-r'
alias stripcolors='sed "s/\x1B\[\([0-9]\{1,2\}\(;[0-9]\{1,2\}\)\?\)\?[mGK]//g"'

[সম্পাদনা]

প্রদত্ত আউটপুট দিয়ে আপনি এটি নিজের দ্বারা যাচাই করতে পারেন:

#!/usr/bin/perl

while ($line=<DATA>) {
    $line =~ s/^[0-9a-f]+: //;
    while ($line =~ s/([0-9a-f]{2})(?=[0-9a-f]{2}| )//) {
      print chr(hex($1));
    }
}
__DATA__
0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761 .[1m.[33m... Wa
0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20 rning: .(B.[mNo
0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368 /Users/apw/.bash
0000030: 2066 6f75 6e64 2e21 0a found.!.

আউটপুট:

$ perl checkerbunny|xxd
0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761  .[1m.[33m...  Wa
0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20  rning: .(B.[mNo 
0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368  /Users/apw/.bash
0000030: 2066 6f75 6e64 2e21 0a                    found.!.

$ perl checkerbunny|stripcolors|xxd
0000000: e29a a020 2057 6172 6e69 6e67 3a20 1b28  ...  Warning: .(
0000010: 424e 6f20 2f55 7365 7273 2f61 7077 2f2e  BNo /Users/apw/.
0000020: 6261 7368 2066 6f75 6e64 2e21 0a         bash found.!.

1
-rপতাকা, ম্যাক বাসদ কাজ বলে মনে হচ্ছে না তাই আমি ব্যবহার করার চেষ্টা -Ewould সবচেয়ে অনুরূপ হবে বলে মনে হয় এবং এটি এখনও যেমন লগ ফাইলে outputting হচ্ছে ... ^[36m| ^[(B^[[m^[[37mSourcing files...^[[m এটি হিসাবে ফিরে আসে | ^[(BSourcing files...আমার লিনাক্স বাক্সে।
iamnewton

দয়া করে আপনার প্রিন্টের সিএমডি পাইপযুক্ত |xxdএবং আপনার TERMএনভির ফলাফল দেখান। Var।

TERM=> xterm0000000: 1b5b 316d 1b5b 3333 6de2 9aa0 2020 5761 .[1m.[33m... Wa 0000010: 726e 696e 673a 201b 2842 1b5b 6d4e 6f20 rning: .(B.[mNo 0000020: 2f55 7365 7273 2f61 7077 2f2e 6261 7368 /Users/apw/.bash 0000030: 2066 6f75 6e64 2e21 0a found.!.
iamnewton

1
এটি এখনও আমাকে একই ফলাফলগুলি পরীক্ষা করে, কেবলমাত্র আমাকে stripcolorsফাংশনটি পরিবর্তন করতে হবে কারণ ম্যাক ওএস এক্স কমান্ডের -rবিকল্পটি বুঝতে পারে না sed। আমি ধরে নিচ্ছি আপনি কিছুটা লিনাক্স ডিস্ট্রোতে আছেন?
iamnewton

3
দুর্ভাগ্যক্রমে, এটি ওএস এক্সে কাজ করে না
জর্জি বুকারান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.