Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Полезная «кошка»

Про антипаттерн «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

Ключи, конечно же, можно комбинировать. Кстати, первый ключ я использовал в последнем варианте «ругающегося однострочника», очень удобно там было пронумеровать им строки, только я там не учёл, что строки нумеруются с единицы, а не с нуля.

10 комментариев
Александр Бабаев (bealex.moikrug.ru) 2013

Доллар в конце, как и крышка — регэкспы же, нет?

Сергей 2013

$ в конце для того, например, чтобы «видеть» где в действительности кончается строка  $
ну и чтобы можно было с этим что-то сделать ;)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для bealex.moikrug.ru:

Доллар в конце, как и крышка — регэкспы же, нет?

Я тоже подумал об регэкспах, когда увидел доллар, но «^I» — это совсем не регулярки, в них специсимволы так не записываются.

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

Александр Бабаев (bealex.moikrug.ru) 2013

Комментарий для Евгения Степанищева:

Версия Сергея, безусловно, верна, я пробовал ответить на вопрос «почему именно $». Согласен, что ответа на него так просто не достать. :)

PastorGL 2013

Комментарий для bealex.moikrug.ru:

пробовал ответить на вопрос «почему именно $»

Всё правильно. Именно потому, что в регэкспах $ означает «конец строки». Тут то же самое назначение у того же самого символа.

Сергей 2013

Я, наверное, очень стар, если знаю, почему $  ;-)

http://en.wikipedia.org/wiki/Dollar_sign#Operating_systems

Кстати, люблю vim с опцией set list, http://yadi.sk/d/6fYYAG3s2_wNK

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Сергей:

Ох. И правда. Я и забыл :)

jankkhvej.tumblr.com 2013

Где-то в советских книжках по программированию авторы объясняли, почему $ приобрёл такой смысл в строках и регекспах, но я не смог найти быстро эти книжки.
Но история там банальная, никакого СПГС ?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для jankkhvej.tumblr.com:

Если найдёте, напишите, интересно :)

Сергей 2013

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

Очень жалко, что «наши» книжки по программированию пропали вместе с наступлением повсеместного интернета. Ну, по крайней, в поиске?