Полезная «кошка»
Про антипаттерн «Useless cat» я рассказал, отдельной заметкой хочу описать чем может быть полезна команда cat, кроме вывода файла на экран. Немногие знают, что у этой команды есть ключи командной строки. В некоторых случаях очень полезно их знать, правда, в разных операционках они могут различаться.
Я приведу те, которые одинаковы у меня в «Маке» и на Линуксе, в моём смартбуке:
# вывести и пронумеровать все непустые строки
cat -b /etc/passwd
# вывести, включая непечатаемые символы (в нотации «^» и «М-»), в конце строки вывести «$»
# (зачем нужен в конце доллар я не знаю, видимо какой-то очень специальный случай)
cat -e /etc/passwd
# вывести, нумеруя все строки
cat -n /etc/passwd
# вывести, заменяя идущие подряд пустые строки на одну
cat -s /etc/passwd
# вывести с непечатаемыми символами, преобразуя табуляцию в «<i>^I</i>»
cat -t /etc/passwd
# вывести, включая непечатаемые символы (в нотации «^» и «М-»)
cat -v /etc/passwd
Ключи, конечно же, можно комбинировать. Кстати, первый ключ я использовал в последнем варианте «ругающегося однострочника», очень удобно там было пронумеровать им строки, только я там не учёл, что строки нумеруются с единицы, а не с нуля.
Доллар в конце, как и крышка — регэкспы же, нет?
$ в конце для того, например, чтобы «видеть» где в действительности кончается строка $
ну и чтобы можно было с этим что-то сделать ;)
Комментарий для bealex.moikrug.ru:
Я тоже подумал об регэкспах, когда увидел доллар, но «^I» — это совсем не регулярки, в них специсимволы так не записываются.
Скорее версия Сергея похожа на правду — если вспомнить какие окошечки терминала были, строки переносились и отличить ситуацию, где был перевод строки от той, где строка перенеслась, потому что места нехватило невозможно. Вот, похоже, и придумали такую опцию для cat.
Комментарий для Евгения Степанищева:
Версия Сергея, безусловно, верна, я пробовал ответить на вопрос «почему именно $». Согласен, что ответа на него так просто не достать. :)
Комментарий для bealex.moikrug.ru:
Всё правильно. Именно потому, что в регэкспах $ означает «конец строки». Тут то же самое назначение у того же самого символа.
Я, наверное, очень стар, если знаю, почему $ ;-)
Кстати, люблю vim с опцией set list, http://yadi.sk/d/6fYYAG3s2_wNK
Комментарий для Сергей:
Ох. И правда. Я и забыл :)
Где-то в советских книжках по программированию авторы объясняли, почему $ приобрёл такой смысл в строках и регекспах, но я не смог найти быстро эти книжки.
Но история там банальная, никакого СПГС ?
Комментарий для jankkhvej.tumblr.com:
Если найдёте, напишите, интересно :)
Оригинал никак не нашёл. Смысл рассказа был такой, что просто выбрали свободный символ на цифровой клавиатуре, и уже потом начали придумывать ему значения, типа «строка», «зачёркнутая строка», кто во что горазд.
Очень жалко, что «наши» книжки по программированию пропали вместе с наступлением повсеместного интернета. Ну, по крайней, в поиске?