Удалить пропущенные пробелы из файла
У моей оболочки есть вызов "фортуны" в моем файле .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
удаляет эти строки.
Ответ 2
# delete all leading blank lines at top of file
sed '/./,$!d'
Источник: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf
Просто подключите вывод удачи в него:
fortune | 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'