Удалить пропущенные пробелы из файла

У моей оболочки есть вызов "фортуны" в моем файле .login, чтобы предоставить мне небольшое сообщение дня. Тем не менее, некоторые из состояний начинаются с одной ведущей строки пробела, некоторые начинаются с двух, а некоторые не имеют каких-либо ведущих строк пробелов вообще. Это меня беспокоит.

Я сел за оболочку с моей собственной оболочкой script, которая удаляла бы все ведущие пробелы со входа, не уничтожая никакого форматирования фактического состояния, которое может иметь намеренные строки пробелов.

Он не кажется простым однострочным двухминутным исправлением, и когда я читал (тростник) через страницы man для sed и grep, я решил, что попрошу наших замечательных покровителей здесь.

Ответ 1

Используя тот же источник, что и Dav:

# delete all leading blank lines at top of file
sed '/./,$!d'

Источник: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

Кроме того, вот почему это работает:

Запятая разделяет "диапазон" операции. sed может принимать регулярные выражения для определений диапазонов, поэтому /./ соответствует первой строке с "ничего" (.), а $ указывает конец файла. Следовательно,

  • /./,$ соответствует "первая непустая строка в конец файла".
  • ! затем инвертирует этот выбор, делая его эффективно "пустые строки в верхней части файла".
  • d удаляет эти строки.

Ответ 3

Как насчет:

sed "s/^ *//" < fortunefile

Ответ 4

Я не уверен, как на самом деле выглядит ваше сообщение о состоянии, но вот иллюстрация

$ string="       my message of the day"
$ echo $string
my message of the day
$ echo "$string"
       my message of the day

или вы можете использовать awk

echo "${string}" | awk '{gsub(/^ +/,"")}1'