Это должно работать без установки другой версии sed
. Изменяет регистр только в первом слове строки.
upper=$(printf "%s" {A..Z})
lower=$(printf "%s" {a..z})
sed "s/ /\n/;h;s/[^\n]*\n//;x;s/\n.*//;y/$upper/$lower/;G;s/\n//" inputfile
Моя версия sed
не подойдет y/[A-Z]/[a-z]/
, для нее требуется явное включение каждого символа, поэтому я использовал переменные. То, как я их создал, зависит от функции, которая есть только в некоторых оболочках, таких как Bash и ksh. Вы можете сделать простое назначение или использовать диапазон, если ваш sed
поддерживает его.
Если ваша версия sed
действительно требовательна, она может потребовать -e
вместо точек с запятой. Эта версия должна работать в этом случае:
sed -e "s/ /\n/" -e "h" -e "s/[^\n]*\n//" -e "x" -e "s/\n.*//" -e "y/$upper/$lower/" -e "G" -e "s/\n//" inputfile