উত্তর:
এখানে প্রথম কমান্ডটি আপনি যে বিন্যাসটি দেখছেন তা অনুকরণ করে vim
। এটি প্রতি 4 কলামের একটি ট্যাব-স্টপ (টিএস) সেটিংয়ের উপর ভিত্তি করে বুদ্ধিমানের সাথে জায়গাগুলির সমমানের সংখ্যায় ট্যাবগুলি প্রসারিত করে।
printf "ab\tcd\tde\n" |expand -t4
আউটপুট
ab cd de
রাখার জন্য ট্যাব হিসাবে ট্যাব ট্যাবে আছে বন্ধ যে 4 র্থ কলামে সেট অবস্থানের, তাহলে আপনি পথ পরিবর্তন করতে হবে একটি ট্যাব-অক্ষর সঙ্গে পরিবেশ কাজ (তেজ কিছু করে ঠিক যেমন :set ts=4
কমান্ড)
উদাহরণস্বরূপ, টার্মিনালে আপনি এই কমান্ডটি দিয়ে ট্যাবটি STOP 4 এ সেট করতে পারেন ;
tabs 4; printf "ab\tcd\tde\n"
আউটপুট
ab cd de
কেবলমাত্র নিম্নলিখিত কোডটি ব্যবহার করুন:
tabs -n
যেখানে n হ'ল ফাঁকের সংখ্যা যেখানে আপনি ট্যাবগুলিকেও অনুরূপ করতে চান। এই প্রত্যেক সময় আপনি শেল, আপনার শুধু সম্পাদনা শুরু করতে হচ্ছে না জন্য .bash_profile
মধ্যে ~/
এবং ফাইল শেষে উপরের লাইনটি যোগ করুন।
ট্যাব কমান্ড সম্পর্কে আরও তথ্যের জন্য, দেখুন:
man tabs
ls
পুটটি সঠিকভাবে প্রান্তিক না দেখায়)।
এখানে ট্যাব বা ট্যাব থামার কোনও ধারণা নেই cat
; প্রোগ্রামটি কেবলমাত্র আউটপুটটির ইনপুটগুলিকে ফ্যানেল করে এবং অন্য কোনও চরিত্রের মতো ট্যাবগুলির সাথে আচরণ করে। যদি আউটপুট ডিভাইসটি টার্মিনাল হিসাবে দেখা দেয়, টার্মিনালটি যে আচরণ হিসাবে কনফিগার করা হয়েছে তা অনুযায়ী হ্যান্ডেল করা হবে।
POSIX.1 প্রয়োগকারী সিস্টেমগুলির একটি কমান্ড রয়েছে যা tabs(1)
ট্যাবগুলি কীভাবে প্রদর্শিত হবে সে সম্পর্কে টার্মিনালের ধারণাটি সামঞ্জস্য করবে। কোনও নির্দিষ্ট ট্যাব বিন্যাসের উপর নির্ভর করে কোনও ভাল ধারণা হিসাবে বিবেচনা করা হয় না, কারণ কেউ আপনার ফাইলটি অন্য কোনও ডিভাইসে যেমন একটি প্রিন্টারে প্রেরণ করতে পারে যা আপনার ইচ্ছা অনুযায়ী কাজ করে না।
আপনি যখন (বা প্লেইন ) সামঞ্জস্য ts
করেন, তখন আপনি যা করছেন তা হ'ল সম্পাদকটি প্রদর্শিত ট্যাব অক্ষরকে কীভাবে ব্যাখ্যা করে। ফাইলটিতে কী শেষ হবে তার কোনও প্রভাব নেই।vim
vi
উপরের উত্তর এবং উদাহরণগুলির উপর ভিত্তি করে মনে হবে যে আসল কমান্ডটি ওপি চেয়েছিল ...
cat somefile | expand -t4
এটি রেড হ্যাট 6.4 এ আমার জন্য কাজ করে।
ইতিমধ্যে প্রদত্ত উত্তরে প্রসারিত expand
করতে, ট্যাব স্টপ অবস্থানগুলির একটি তালিকাও নিতে পারে। যদি বৈকল্পিক কলামগুলির সামগ্রীর দৈর্ঘ্যের পরিমাণ অনেক বেশি হয় তবে এটি কার্যকর।
আমি আজ এই প্রয়োজনটি পেরিয়ে এসেছি যখন আমি আউটপুটটিকে openssl ciphers
আরও পাঠযোগ্য করে তুলতে চাই :
$ openssl ciphers -v 'HIGH'|tr -s ' ' '\t'|expand -t31,41,57,70,90
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
...
ECDH-ECDSA-AES128-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA1
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1
কেবলমাত্র ব্যবহার expand -t31
করলে আউটপুটটির প্রস্থটি প্রায় 100 টি অক্ষর থেকে 160 টিরও বেশি অক্ষরে ফুরিয়ে যায়।
column
:openssl ciphers -v 'HIGH' | column -t
অনেক টার্মিনাল ভেরিয়েবল ট্যাব স্টপ সেট করে support যেগুলি ভিটি 100, লিনাক্স এবং ইএমসিএ-48 স্ট্যান্ডার্ড সমর্থন করে, বেশিরভাগ শর্ত লিনাক্স সমর্থন সেটিংস ট্যাব আকারের ক্ষেত্রে: xterm এবং পরিবার (uxterm, urxvt) xfce4- টার্মিনাল, লুইট, টার্মিনাল, SecureTTY, অন্যদের মধ্যে।
তাই প্রতি 2 টি স্পেসে লগইন করতে আমার ট্যাবগুলি সেট করতে কয়েক বছর আগে একটি স্ক্রিপ্ট লিখেছিল - 4, তারপরে অল্প সময়ের জন্য 3 এবং এখন 2 এ ব্যবহৃত হয় ...
সুতরাং এখন, আমি যদি একটি ফাইল 'ক্যাট' করি তবে ফাইলের ট্যাবগুলি আমার টার্মিনালের সেটিংসে প্রসারিত হবে।
আমি যদি ভিএম বা আরও বেশি কিছু পেতে পারি তবে তারা তাদের নিজস্ব ট্যাব সম্প্রসারণ করে তবে প্রচুর ব্যবহারের ট্যাব ব্যবহার করে।
এখানে স্ক্রিপ্টটি উল্লেখ এবং ব্যক্তিগত ব্যবহারের জন্য অন্তর্ভুক্ত করবে:
#!/bin/bash -u
#console_codes(4) man page... vt100/2 et && EMCA-48 standard
# (c) la walsh (2013) -- free to use and modify for personal use.
# -- optionally licenced under Gnu v3 license.
# v0.0.3 - try to reduce tabcols to minimal set to reproduce.
# v0.0.2 - set tabs for full terminal width (try to get term width)
shopt -s expand_aliases extglob
alias my=declare
alias int='my -i' array='my -a' intArray='my -ia' string=my
my _Pt=$(type -t P)
[[ $_Pt && $_Pt == function ]] && unset -f P
alias P=printf
unset _Pt
P -v clrallts "\x1b[3g" #Clear All TabStops
P -v hts "\033H" #Horizontal TabStop
P -v cpr "\x1b[6n" #Current Position Report
getcols() { # try to read terminal width
local sttyout="$(stty size </dev/tty)"
int default_cols=80
if [[ -n ${COLUMNS:-""} && $COLUMNS =~ ^[0-9]+$ ]]; then
default_cols=$COLUMNS; fi
[[ -z ${sttyout:-""} ]] && { echo $default_cols; return 0; }
int cols="${sttyout#*\ }"
echo -n $[cols<2?default_cols:cols]
return 0
}
getpos () {
string ans wanted=${1:-xy}
int attempt=0 max_attempt=1 # in case of rare failure case
# use 'attempt' value as additional
# time to wait for response
while : ; do
( ( P "\x1b[6n" >/dev/tty) & 2>/dev/null )
read -sd R -r -t $[2 + attempt] ans </dev/tty;
ans=${ans:2};
int x=0-1 y=0-1
if ! x="${ans#*;}" y="${ans%;*}" 2>/dev/null ||
((x==-1||y==-1)); then
((attempt+=1 < max_attempt)) && continue
fi
break; done
string out=""
[[ $wanted =~ x ]] && out="$x"
[[ $wanted =~ y ]] && out="${out:+$x }$y"
[[ $out ]] && echo -n "$out"
}
declare -ia tabs
get_tabs () {
P "\r"
tabs=()
int pos=0 oldpos=0-1
while ((oldpos!=pos));do
((pos)) && tabs+=($pos)
oldpos=pos
P "\t"
pos=$(getpos x)
done
P "\r"
return 0
}
# Note: this func uses ability to _read_ tabstops as _proxy_ for setting them
# (i.e. it makes no sense to be able to read them if you can't set them)
test_tabset_ability () {
string prompt="tty_tab:"
int newcol=${#prompt}+1
P "\r$prompt"
int mycol=$(getpos x)
((mycol && mycol==newcol)) && return 0 ## return OK
{ P " Term tabset ability not detected mycol=${mycol:-''},"
P " promptlen=$newcol)\n"; } >&2
exit -1
}
do_help_n_display_curtabs () {
P " <n> - set tab stop to N\r"
intArray diffs;
int last=1 cur i
string eol=""
get_tabs && {
for ((i=0; i<${#tabs[@]}; ++i)); do
cur=${tabs[i]}
diffs[i]=cur-last
last=cur
done
intArray reverse_tabs_set=()
int prevtab=0-1
for ((i=${#diffs[@]}-2; i>0; --i)); do
int thistab=${diffs[i]}
if ((thistab!= prevtab)) ;then
reverse_tabs_set+=($thistab)
prevtab=thistab
fi
done
P "current value: tty_tab "
for ((i=${#reverse_tabs_set[@]}-1; i>=0; --i)); do
P "%d " "${reverse_tabs_set[i]}"; done
P "\r";
}
get_tabs && {
P "(from 1, tabs skip to column: "
P "%s " "${tabs[@]}"
P "\r\n"
}
}
set_tabs () {
int max_col=${1:=0-80}
int tabstop=${2:-?"need a param for tabstop"}
int tab=$tabstop pos=0
string str=""
P $clrallts ## reset old tabs
while ((++pos<cols)) ;do ## move across screen setting tabs
str+=" "
((pos%tab)) || str+="$hts"
done
P "\r$str\r"
}
int cols=$(getcols)
test_tabset_ability ## exits if no ability
if (($#==0)) ; then
do_help_n_display_curtabs
exit 1
else
set_tabs "$cols" "$@"
fi
# vim: ts=2 sw=2
আশা করি এটা সাহায্য করবে...
ম্যানপেজ অনুযায়ী, বিড়াল নিজে থেকে এটি করতে পারে না। তবে আপনি উদাহরণস্বরূপ tr
ট্যাবগুলি যে কোনও সংখ্যক স্পেসের সাথে প্রতিস্থাপন করতে ফিল্টারের মাধ্যমে বিড়াল থেকে আউটপুট চালাতে পারেন :
cat somefile | tr '\t' ' '
দুটি স্পেস দিয়ে ট্যাব চরিত্রটি প্রতিস্থাপন করবে।
আপডেট: এই পোস্টে মন্তব্যগুলিতে নির্দেশিত হিসাবে, এটি আসলে কাজ করে না । তবুও, উত্তরটি এটি কীভাবে না করা যায় তার উদাহরণ হিসাবে রাখছি ।
'\t'
কেবলমাত্র একটি জায়গার সাথে প্রতিস্থাপন করছে, দ্বিতীয় জোড়ের উদ্ধৃতিগুলির মধ্যে কত স্পেস রয়েছে তা বিবেচনা না করে' '
tr
সেভাবে কাজ করে না .. আর্গ 1 এর প্রতিটি বাইট প্রতিটি তর্ক 2 এর সাথে সম্পর্কিত বাইট দ্বারা প্রতিস্থাপিত হয় ..... সুতরাং printf '\t' |tr '\t' 'ळ'
যার একক বাইট মুদ্রিত হয় যার হেক্স মান হয় \xE0
.. যা তিনটি ইউটিএফ -8 এর প্রথম বাইট এনকোডেড বাইটগুলি যা চরিত্রটি তৈরি করে ळ
(যার ইউনিকোড কোডপয়েন্টের মান U + 0933)
expand
(কোর্টিলস প্যাকেজ থেকে) এবংtabs
(এনক্রোস প্যাকেজ থেকে) কমান্ড, (২)। এবং টিএস এর অর্থ [ টি ] আব [ এস ] শীর্ষ