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

Про антипаттерн «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
Ключи, конечно же, можно комбинировать. Кстати, первый ключ я использовал в последнем варианте «ругающегося однострочника», очень удобно там было пронумеровать им строки, только я там не учёл, что строки нумеруются с единицы, а не с нуля.
12 февраля 2013 22:24

Александр Бабаев (bealex.moikrug.ru)
13 февраля 2013, 00:55

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

Сергей (инкогнито)
13 февраля 2013, 04:39

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

bolk (bolknote.ru)
13 февраля 2013, 07:12, ответ предназначен Александр Бабаев (bealex.moikrug.ru):

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

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

Александр Бабаев (bealex.moikrug.ru)
13 февраля 2013, 10:31, ответ предназначен bolk (bolknote.ru):

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

PastorGL (инкогнито)
13 февраля 2013, 18:21, ответ предназначен Александр Бабаев (bealex.moikrug.ru):

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

Сергей (инкогнито)
13 февраля 2013, 18:49

Я, наверное, очень стар, если знаю, почему $ ;-)
http://en.wikipedia.org/wiki/Dollar_sign#Operating_systems
Кстати, люблю vim с опцией set list, http://yadi.sk/d/6fYYAG3s2_wNK

bolk (bolknote.ru)
13 февраля 2013, 22:11, ответ предназначен Сергею

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

jankkhvej.tumblr.com (инкогнито)
14 февраля 2013, 02:27

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

bolk (bolknote.ru)
14 февраля 2013, 07:12, ответ предназначен jankkhvej.tumblr.com

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

Сергей (инкогнито)
16 февраля 2013, 18:13

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

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)