2009-12-20 6 views
10

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

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

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

+0

может явно показать образец состояние и точку какие части вы хотели бы изменить и какие части вы считаете частью форматирования, которые не должны меняться. – SiegeX

ответ

16

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

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

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

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

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

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

Отлично !! Огромное спасибо!! Ссылка будет очень полезна и в будущем. – Maarx

+2

Кажется, яснее написать: sed -n '/./,$p' –

+0

Чтобы заставить это работать с ~ 30K java-файлами, которые мне нужно было обработать, я запускал «find. -name» * .java '| xargs - n 1 sed -e '/./,$!d' -i .bak "- для того, чтобы sed работал правильно," -n 1 " – Phil

1

Как насчет:

sed "s/^ *//" < fortunefile 
+1

Почему это проголосовало? Вот как я читаю запрос OP. – SiegeX

0

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

$ 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'