Это один из способов сделать это с помощью "sed":
TAB=`echo 'x' | tr 'x' '\011'`; # tab
SPC=`echo 'x' | tr 'x' '\040'`; # space
WS="[${SPC}${TAB}]"; # whitespace regex
echo "YLB; YLR; YLS ${TAB} 30" |
sed -ne "
/\n/!G
s/^\([^;]*\);${WS}*\(.*\)\(${WS}${TAB}.*\)/\1\3\2\3/
P;/\n.*\n/D
"
У нас должны быть переменные оболочки TAB/SPC/WS, так как POSIX "sed" не поддерживает \t \s, следовательно, это плохо- мужская реализация тех.