Удалить ведущие пробелы из файла - PullRequest
11 голосов
/ 20 декабря 2009

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

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

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

Ответы [ 4 ]

18 голосов
/ 20 декабря 2009

Использование того же источника, что и 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 голосов
/ 20 декабря 2009
# delete all leading blank lines at top of file
sed '/./,$!d'

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

Просто перенаправьте вывод удачи в него:

fortune | sed '/./,$!d'
1 голос
/ 20 декабря 2009

Как насчет:

sed "s/^ *//" < fortunefile
0 голосов
/ 20 декабря 2009

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

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