Удаляйте в файле конечные пробелы только из непустых строк

Я знаю, как удалить все конечные пробелы из файла, например:

sed -i 's/  *$//' file

Есть ли способ сделать это, но не в строках, содержащих только пробелы?

Что-то в духе:

sed -i 's/[a-zA-Z0-9;}{]  *$/[a-zA-Z0-9;}{]/' file
                         ^ keep the original characters

Желательно, но не обязательно, с сед. Подойдет любое поддерживаемое Linux решение.

Спасибо

1 ответ

Просто убедитесь, что какой-то другой персонаж появляется раньше:

sed -r 's/([^\s])\s+$/\1/' file

Это проверяет, если символ не пробел (\s) появляется любое количество пробелов. Если это так, просто напечатайте этот непробельный символ обратно, чтобы завершающие пробелы были удалены.

Тестовое задание

С помощью cat -vet чтобы увидеть маркеры:

$ cat -vet a
hello    $
       $
bye   $
$ sed -r 's/([^\s])\s+$/\1/' a | cat -vet -
hello$
 $
bye$
Другие вопросы по тегам