Я обнаружил, что команда запуска в другом ответе работает только в том случае, если идентификатор является двузначным числом. Вот мои модификации, которые должны работать как для одного, так и для двухзначного числа:
В приложениях запуска
bash -c "for id in `/usr/bin/xinput list | /bin/grep 'USB Mouse' | /bin/grep -o id=[0-9][0-9]*`; do xinput set-button-map ${id:3} 3 2 1; done;"
sed -r "s/(.*)([[:space:]][[:digit:]]*.*)$/\2\1/" Top10 | sed -r "s/([[:space:]])([[:digit:]])/\2/" | sed -r "s/([[:digit:]])([[:alpha:]])/\1 \2/" > Top10
заставляет файл сначала перезаписываться с помощью > Top10 и только затем обрабатываться sed (в этот момент файл пуст)
Нет причин запускать 6 команд sed, если вы можете сделать это в одном:
sed -ri 's/^[^0-9]*$//; s/(.*)/\L\1/; y/[aeiou]/[AEIOU]/; s/(.*)([[:space:]])([[:digit:]]*.*)$/\3 \1/' Top10
Обратите внимание, в частности, как второй канал команд sed можно объединить в одно выражение, если вы просто сгруппировали свои матчи по-разному. Так как вы все равно хотите отбросить ведущие пробелы, а затем добавить пробел после версии, вы можете сделать это в самом исходном совпадении, группируя ведущее пространство и версию отдельно.