ऐसा करने के कई तरीके हैं। सबसे पोर्टेबल दो जो मुझे पता हैं sed
और od
- वे दोनों पोसिक्स हैं।
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 >$