Перемещение файловых дескрипторов в zsh

Один из способов сделать это с sed :

sed 's/\([^ ]\{15\}\)[^ ]*/\1/g'

То же самое с perl :

perl -lpe 's/\S{15}\K\S*//g'

С awk :

awk '{ for(i=1; i<=NF; i++) $i=substr($i, 0, 15)} 1'

С vim :

:%s/\v\S{15}\zs\S*//g

С вырезом :

tr ' ' '\n' <file.txt | cut -b1-15 | paste -d ' ' - - - -
2
13.12.2016, 00:39
1 ответ

zsh не поддерживает синтаксис перемещаемого файлового дескриптора, например bash или ksh . Итак, 1> & 3- означает перенаправление стандартного вывода и стандартной ошибки в файл с именем 3- :

$ echo -n '<'; zsh -c 'ls 3>&2 2>&1 1>&3-'; echo '>'
<>
$ ls
3- a b

Для достижения такого же поведения дескриптора движущегося файла, как bash и ksh в любой оболочке POSIX:

sh -c 'ls 3>&2 2>&1 3>&1 3>&-'

Это то, что 1> & 3- в bash и ksh выполняет внутренний дублированный файл дескриптор 3 в файловый дескриптор 1, затем закройте файловый дескриптор 3.

5
27.01.2020, 21:59

Теги

Похожие вопросы