- 1
sed '/^[:space:]*$/d'
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−130
sed '/^[:space:]*$/d'
Проблема была: помимо пустых строк код ВНЕЗАПНО удалял строчки, состоящие из слова "as" (через этот код проходят SQL-скрипты).
хотя нет, кажется попал пальцем в лужу: там же начало и конец ограничены. Так каким образом в [:space:] попало as?
я бы \s написал
Это же чистые PCRE, но много где сперты, в питоне, как мне помнится, как раз они используются, да. Я, впрочем, питон только на уровне конфигурирования cvs2svn знаю:)
А PCRE, вообще, придумали демоны красноглазые, для того, чтобы окончательно запутать и так непростую нотацию!:)
http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap05.html#tagtcjh_2
Но \s в sed работает корректно :)
И меня расстраивает, что я не могу понять, почему:)
Есть идея... Удаляются только строчки вида /^$/, или строчки /^ $/ тоже удалятся?
Покурил еще стандарт, где сказано:
The interpretation of an ordinary character preceded by a backslash ( '\' ) is undefined, except for:
* The characters ')', '(', '{', and '}'
* The digits 1 to 9 inclusive (see BREs Matching Multiple Characters)
* A character inside a bracket expression
В стандарте на sed не сказано ничего про дополнения к BRE, кроме \n.
В гнусном sed сказано про \w, \W, \b, \B.
Вот еще ресурс: http://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq6_008.html
Тоже, упоминается только в sedmod каком-то.
Короче, гнусная недокументированная фича!
И портабельнее. Кстати, о портабельности и в гнусном мануале сказано, что точно портабельны будут только \n и \\.