С достаточно недавним гостем virtio ядро (2.6.38 + я думаю), измененный размер тома покажет до гостя без перезагрузки или повторного прикрепления. Иначе необходимо перезапустить гостя (или по крайней мере, xm block-detach/block-attach) для наблюдения нового пространства.
Есть много способов сделать это. Самые портативные два, о которых я знаю, это sed
и od
- они оба POSIX.
printf '\n\r\b\t\033[01;31m' | sed -n l
- им нравится... читать
в стиле бегства - в стиле С.
$
\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
ackslash. Это позволяет легко перевести на прочитанный
или %b
printf
аргумент. For example:
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 >$
Вы можете использовать что-то вроде,
$ cat filename
Ramesh is testing
New Line is
Теперь вы можете сделать что-то вроде,
$ cat -A filename
Output
Ramesh is testing$
New Line ^Iis $
Еще одно общее тестирование без файлов:
$ echo Hello$'\t'world. | cat -A
Приведенная выше команда дает вывод как,
Hello^Iworld.$
Ссылки
При удалении переключателя -e
на echo
, в bash
, и если опция xpg_echo
не включена, она должна печатать строки как не более чем их исходный текст. Поэтому \n
и \t
будут отображаться так же буквально.
$ echo "hi\t\tbye\n\n"
hi\t\tbye\n\n
$ echo -e "hi\t\tbye\n\n"
hi bye
Вы также можете использовать встроенную команду printf
ksh93
, zsh
или bash
, чтобы отыграть и это. Вывод
$ printf "%q\n" "$(echo -e "hi\t\tbye\n\nbye")"
$'hi\t\tbye\n\nbye'
(bash
показан выше. Существуют некоторые вариации в зависимости от оболочки).
help printf
в bash
%q
цитируйте аргумент так, чтобы его можно было повторно использовать в качестве входного аргумента оболочки
od -c
будет печатать обычные символы как обычно, но специальные символы (табуляция, новая строка и т. Д.) И непечатаемые символы в качестве их escape-кода printf
.
Итак:
$ echo -e asdf\\nghjk\\003foo | od -c -An
a s d f \n g h j k 003 f o o \n
-An
сообщает od
не выводить адрес.
Используйте команду printf
. Например:
printf "Привет \ nэто моя строка
выведет
Hello
this is my line
С помощью zsh
, имеются (q)
, (qq)
, (qqq)
, (qqq)
флаги расширения переменных, которые могут по-разному цитировать переменные:
$ a=$'a b\nba\bc\u00e9\0'
$ printf '%s\n' $a
a b
bcé
$ printf %s $a | od -vtc
0000000 a b \n b a \b c 303 251 \0
0000013
$ printf '%s\n' ${(q)a}
a\ b$'\n'ba$'\b'cé$'\0'
$ printf '%s\n' ${(qq)a}
'a b
bcé'
$ printf '%s\n' ${(qqq)a}
"a b
bcé"
$ printf '%s\n' ${(qqqq)a}
$'a b\nba\bcé\0'
$ (){local LC_ALL=C; print -r -- ${(qqqq)a}}
$'a b\nba\bc\303\251\0'
В вашем случае, вероятно, вам понадобится один из двух последних.