の文字列からn個の印字可能な文字を出力bash
に、(たとえば色)の任意の文字列を指定すると、正しい色で印刷された印刷可能な文字のサブセットを出力するにはどうすればよいですか?bash:ANSIコード
与え例えば:
s=$'\e[0;1;31mRED\e[0;1;32mGREEN\e[0;1;33mYELLOW'
私のようなものはどのように行うのです:
coloursubstr "$s" 0 5
coloursubstr "$s" 2 7
を
の文字列からn個の印字可能な文字を出力bash
に、(たとえば色)の任意の文字列を指定すると、正しい色で印刷された印刷可能な文字のサブセットを出力するにはどうすればよいですか?bash:ANSIコード
与え例えば:
s=$'\e[0;1;31mRED\e[0;1;32mGREEN\e[0;1;33mYELLOW'
私のようなものはどのように行うのです:
coloursubstr "$s" 0 5
coloursubstr "$s" 2 7
を
:
coloursubstr() {
local string="$1" from="$2" num="$3"
local line i array=()
# fill array
while IFS= read -r line; do
[[ $line =~ ^([^m]+m)(.*)$ ]]
for ((i=0;i<${#BASH_REMATCH[2]};i++)); do
array+=("${BASH_REMATCH[1]}${BASH_REMATCH[2]:$i:1}")
done
done < <(grep -Po $'\x1b.*?m[^\x1b]*' <<< "$string")
# print array
for ((i=$from;i<$from+$num;i++)); do
printf "%s" "${array[$i]}"
done
echo
}
s=$'\e[0;1;31mRED\e[0;1;32mGREEN\e[0;1;33mYELLOW'
coloursubstr "$s" 0 5
coloursubstr "$s" 2 7
出力:
私はすべてのカラーコードを仮定は、\e
で始まるm
と端とテキストはカラーコードが付けています。
部分的な答えは、(マジックナンバーを持つ特定のハック、全く一般的ではない):
echo "${s:0:23}"
echo "${s:0:9}${s:11:25}"
出力:bashのとGNU grepので
「任意の文字列を与えられました」と読み替えてください。 –
@TomHale、同様に、 'Partial'、' not ... general'を再読み込みします。上記はQに満足のいく答えではありませんが、それは最初のステップまたは踏み台のアイデアかもしれません。そして、それがまったく動作するという事実は、一部の読者の役に立つかもしれません。 – agc
https://codegolf.stackexchange.com/にお問い合わせください。 –