Легко динамически построить строку и оценить ее:
eval "$(echo -n 'pr -mt '; while read ext; do echo "<(ls -1 *.$ext)"; done < list |tr '\n' ' ' )"
где list
будет файлом (возможно, fifo), представляющим список расширений, из которых вы хотите построить команду.
<()
по сути создает безымянные FIFO. Альтернативой без eval может быть использование именованных:
while read ext; do mkfifo ${ext}.pipe; ls -1 *.$ext > ${ext}.pipe & done
pr -mt *.pipe
rm *.pipe #remove the named pipes when done
Вышеприведенное предполагает, что в вашем каталоге нет других имен файлов, заканчивающихся на ".pipe".
POSIBLEMENTE:
LC_ALL=C sed -e '$!N;/value:/b1' -e 'P;D' -e:1 -e 's/\n[[:space:]]*/ /' <file
Es sencillo:
$!N
:con cada línea excepto la última, leyendo la línea siguiente /value:/b1
:si el patrón coincide, vaya a la rama llamada1
P;D
:si el patrón no coincide, imprima la línea actual, comience un nuevo ciclo con la línea de lectura de $!N
anterior. Entonces, si tiene line1\nline2
, imprima line1
, comience un nuevo ciclo con line2
, $!N
haga que sea line2\nline3
y así sucesivamente. :1
:define la rama denominada1
's/\n[[:space:]]*/ /'
:en la rama 1
, reemplace la nueva línea incrustada y los espacios iniciales con un espacio. Mantenlo simple:
sed 'N;s/\n[[:space:]]*value:/ value:/;P;D'
Haga un ciclo N;P;D
para procesar siempre dos líneas a la vez (no se necesita $!
aquí por cierto ). En el interior, reemplace una nueva línea con espacios seguidos de value:
con un solo espacio en blanco. Eso es.
Вы также можете попробовать использовать sed
sed -e '/: {$/{N;s/\n//g}' -e 's/{.*v/{ v/g' file
Пояснение:
/
условие запуска : {$
если строка заканчивается на: {
/
Конечное состояние {
Группа операций пуска N;
объединить строку ниже с соответствующей строкой s/\n//g
производит замену\n
}
Конец рабочей группы Опционально для форматирования вывода
's/{.*v/{ v/g'
выполнить другое выражение, в котором заменить все пробелы между {
иv
()одним пробелом Насколько я понимаю, Solaris не поддерживает параметр -i
, поэтому для внесения изменений необходимо выполнить перенаправление вывода.
Попробуйте