এটি করার অনেকগুলি উপায় রয়েছে। সবচেয়ে পোর্টেবল দুই যে আমি জানি হয় sed
এবং od
- তারা উভয় POSIX করছি।
printf '\n\r\b\t\033[01;31m' | sed -n l
এটি পছন্দ করে ... read
শৈলী পলায়ন - সি স্টাইল।
আউটপুট
$
\r\b\t\033[01;31m$
od
একটু বেশি কনফিগারযোগ্য ...
printf '\n\r\b\t\033[01;31m' |
od -v -w12 -t c -t a -A n
\n \r \b \t 033 [ 0 1 ; 3 1 m
nl cr bs ht esc [ 0 1 ; 3 1 m
যদি আপনি জানতে চান যে এই সমস্ত বিকল্পগুলির মধ্যে আপনি কী দেখতে পারেন man od
তবে আমি উল্লেখ করেছি যে আমি দুটি ধরণের পলায়ন চাই - -t c
ব্যাকস্ল্যাশ পলায়ন এবং -t a
নামযুক্ত অক্ষরগুলি। -w
উপরে ব্যবহৃত বিকল্প POSIX-নির্দিষ্ট নয়।
এবং এখানে একটি ছোট শেল ফাংশন যা তার আর্গুমেন্টে প্রতিটি বাইটের অক্টাল মানগুলি বহনযোগ্যভাবে মুদ্রণ করবে - যা অবশ্যই এটির od
সাথে পরিচালনা করতে পারে -t o
:
proctal() (LC_ALL=C
for a do while [ -n "$a" ]
do printf %o\\n "'$a"
a=${a#?}; done; done)
এটি একটি সহজ। এটি কিছুটা জটিল। printf -q
যদিও শেল-নির্দিষ্ট বাস্তবায়নগুলি এটি করতে সক্ষম হবে ।
bsq() (set -f; export LC_ALL=C IFS=\'
for a do q=${a##*\'}; printf \'
[ -n "${a#"$q"}" ] &&
printf "%s'\''" ${a%\'*}
printf "%s'\n'''''\n" "$q"; done |
sed -n "/'''''"'/!H;1h;//!d;$!n;x;l' |
sed -e :n -e '/\\$/N;s/.\n//;tn
s/\([^\\]\\\(\\\\\)*\)\([0-9]\)/\10\3/g
s/\\\\'"''/\\\\''"'/g;s/$$//'
)
সামান্য অতিরিক্ত দিয়ে পূর্বের উদাহরণ স্ট্রিং ব্যবহার করে:
bsq "$(printf '\n\r\'\''b\t\033[01;31m')"
আউটপুট
'\n\r\\'\''b\t\0033[01;31m'
এটি কিছুটা আলাদা। আপনি খেয়াল করতে পারেন একটি অতিরিক্ত 0
এবং অতিরিক্ত \b
অ্যাক্ল্যাশ রয়েছে। এটি read
কোনও %b
printf
যুক্তি বা যুক্তিতে সহজ অনুবাদ করার অনুমতি দেয় । উদাহরণ স্বরূপ:
i=0
until [ $((i=$i+1)) -gt 5 ]
do touch "\%$i$(printf 'hey\b \t;\n\033 ')"
done #just for ugly's sake
bsq * | eval "
printf '<%b>\n' $(tr \\n \ )
" | tee /dev/fd/2 |
sed -n l
আউটপুট
<\%1he ;
>
<\%2he ;
>
<\%3he ;
>
<\%4he ;
>
<\%5he ;
>
<\\%1hey\b \t;$
\033 >$
<\\%2hey\b \t;$
\033 >$
<\\%3hey\b \t;$
\033 >$
<\\%4hey\b \t;$
\033 >$
<\\%5hey\b \t;$
\033 >$