ответ ниже, с командной строкой nl, является гораздо более простым решением.
Даниэль Рибейро
2
@DanielRibeiro проще, но менее надежен и менее гибок.
Джонатан Хартли
@DanielRibeiro Использование ответа nlтакже НЕПРАВИЛЬНО. В исходном коде он никогда не даст правильные номера строк, поскольку он не считает строки только с пробелами.
oligofren
@jtbandes Ваше решение добавляет пробелы между номером строки и табуляцией (по крайней мере, на моем Mac)
Йосси Вайнштейн
55
Команда nl должна сделать это, но она также добавляет пробел перед номером строки. Это часть Linux Coreutils.
На самом деле, вы можете сказать, nlчтобы пропустить пробел перед числом. Просто используйте -w1опцию, чтобы указать минимальную ширину для числа 1.
CJM
2
Помните, что по умолчанию 'nl' предполагает, что ваш текст разбит на 'страницы' с верхними и нижними колонтитулами, все разделены такими строками, как '\:' или '\: \:' или '\: \: \:'. Если в вашем тексте есть такие строки, как «nl», вы получите неожиданные результаты, такие как проглатывание этих строк, разделов без нумерации или перезапуск нумерации с 1 в разделе. Используйте -dXY (где XY - пара символов, которые не встречаются в строке в вашем тексте), чтобы предотвратить это поведение. В общем случае это может быть трудно предсказать, поэтому я бы рекомендовал использовать одно из других решений на этой странице.
Джонатан Хартли
Использование '-w1' не только удалит пробел после чисел, но также урежет номера строк до ширины всего в один символ, что означает, что в номерах строк отображается только их наименее значимая цифра. Это почти наверняка не то, что вы хотите.
Джонатан Хартли
4
С помощью -nlnвы можете выравнивать по левому краю, если не хотите пробелов перед номерами строк. Кроме того, чтобы указать разделитель табуляции, вы можете использовать -s$'\t'или -s' '(вставьте вкладку между одинарными кавычками с помощью ctrl+vзатем tab).
don_crissti
2
@JonathanHartley nl -w1(от GNU Coreutils 8.24) не не усечь номера строк.
Skippy le Grand Gourou
10
sed = test.txt | sed 'N;s/\n/\t/'
Команда «sed =» напечатает номер строки, за которым следует возврат каретки, а затем следующая строка.
Выражение «N; s / \ n / \ t /» будет занимать каждую строку, получать следующую строку (т.е. номер строки и строку) и заменять возврат каретки табуляцией.
Печатает букву "t" без табуляции с моей версией sed: 8t Я видел лучшие умы моего поколения, уничтоженные 9t безумием, истерично голодающими голыми,
Ричард Хоскинс
1
Обратите внимание, что \nэто перевод строки (обычно называемый просто «новой строкой», так как его первое широкое распространение было в Unix), и \rэто возврат каретки. Windows использует \r\n(также упоминается как CRLF).
Камило Мартин
(Yay придирки!)
Камило Мартин
Если мы собираемся вникать в то, как могут отличаться окна, то нам, возможно, придется рассмотреть UTF16.
Ответы:
источник
awk '{print NR, "\t", $0}'
.nl
также НЕПРАВИЛЬНО. В исходном коде он никогда не даст правильные номера строк, поскольку он не считает строки только с пробелами.Команда nl должна сделать это, но она также добавляет пробел перед номером строки. Это часть Linux Coreutils.
источник
nl
чтобы пропустить пробел перед числом. Просто используйте-w1
опцию, чтобы указать минимальную ширину для числа 1.-nln
вы можете выравнивать по левому краю, если не хотите пробелов перед номерами строк. Кроме того, чтобы указать разделитель табуляции, вы можете использовать-s$'\t'
или-s' '
(вставьте вкладку между одинарными кавычками с помощьюctrl+v
затемtab
).nl -w1
(от GNU Coreutils 8.24) не не усечь номера строк.Команда «sed =» напечатает номер строки, за которым следует возврат каретки, а затем следующая строка.
Выражение «N; s / \ n / \ t /» будет занимать каждую строку, получать следующую строку (т.е. номер строки и строку) и заменять возврат каретки табуляцией.
источник
\n
это перевод строки (обычно называемый просто «новой строкой», так как его первое широкое распространение было в Unix), и\r
это возврат каретки. Windows использует\r\n
(также упоминается какCRLF
).cat -n добавляет бельевые числа как "123 linecontents", а регулярное выражение изменяет их на "linenumberTABlinecontents"
источник
или
источник
Как насчет
?
источник
ОК, вот решение для одной строки:
Первая настройка IFS указывает bash читать всю строку за раз. Вторая строка сбрасывает IFS по умолчанию.
В качестве дополнительного бонуса, он полностью запускается в вашей оболочке и не запускает программу!
источник
Хорошо, так как мы собираем способы сделать это,
источник
или для некоторых не-GNU
sed
:источник