Используйте подстановку команды :
tail -f "$(ls -1r *.log | head -n 1)"
Это запускает ls -1r * .log | head -n 1
в подоболочке, берет его выходные данные и создает новую команду, используя их; поэтому, если канал ls
выводит data170216.log
, команда становится
tail -f "data170216.log"
, что вам и нужно.
Примечание head -n 1
вместо head -1
; последняя форма сейчас устарела.
Вы можете использовать awk
, как предлагается в других ответах, но вы также можете использовать fmt
fmt -s -w8 file
What is
life?
how are
you?
hi
whatup
this
is more
than
Чтобы получить желаемый результат с помощью sed
:
$ sed -e 's/.\{7\} /&\
/' <file
What is
life?
how are
you?
hi
whatup
this is
more than
Поскольку 8-й символ в вашем вводе всегда пробел, это помогло.
Если вы хотите прерваться на 7-м символе независимо от 8-го:
$ sed -e 's/./\
&/8' <file
Хотя вы можете сделать это в awk
:
$ awk '{sub(/.{8}/,"&\n"); print}' file
What is
life?
how are
you?
hi
whatup
this is
more than
это действительно не лучший инструмент для данной работы. Вы можете сделать то же самое более просто с помощью:
$ fold -sw 8 file
What is
life?
how are
you?
hi
whatup
this is
more
than
Вы также можете использовать Perl:
$ perl -pe 's/.{8}/$&\n/' file
What is
life?
how are
you?
hi
whatup
this is
more than
with
awk 'length < 7 { print ; next ; }
{ printf "%s\n%s\n",substr($0,0,7),substr($0,8) }' file.txt
result is
What is
life?
how are
you?
hi
whatup
this is
more than
to skip white char use
awk 'length < 7 { print ; next ; }
{ printf "%s\n",substr($0,0,7) ;
i=8 ; while (substr($0,i,1) == " " ) i++; printf "%s\n",substr($0,i) }'