Удаляйте в файле конечные пробелы только из непустых строк
Я знаю, как удалить все конечные пробелы из файла, например:
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$