Как можно добавить номер строки и табуляцию к каждой строке текстового файла?

45375
Richard Hoskins

Как добавить номер строки и табуляцию в начало каждой строки текстового файла?

42
Что мне интересно, так это то, как вы делаете это в Windows ... itsadok 15 лет назад 0
Это должно быть на стеке потока? Для суперпользователя ответ - Блокнот и много терпения. kokos 15 лет назад 3
Итак, вы хотите добавить или добавить. Ваш заголовок и основной текст разные;) matpie 15 лет назад 1
Я предполагаю, что хочу * добавить к началу *, "prepend" - это всего лишь слово для хакеров. Richard Hoskins 15 лет назад 0
В Windows, как и в случае с любым другим вопросом программирования, вы можете установить Cygwin, а затем использовать ответы ниже. Jonathan Hartley 11 лет назад 0

9 ответов на вопрос

51
ACoolie

Команда nl должна сделать это, но она также добавляет пробел перед номером строки. Это часть Linux Coreutils.

nl lines.txt 1 $bkWTN 2 $cV8$. 
На самом деле, вы можете сказать `nl` пропустить пробел перед числом. Просто используйте опцию `-w1`, чтобы указать минимальную ширину для числа 1. cjm 11 лет назад 4
Помните, что по умолчанию 'nl' предполагает, что ваш текст разбит на 'страницы' с верхними и нижними колонтитулами, все разделены такими строками, как '\:' или '\: \:' или '\: \: \:'. Если в вашем тексте есть такие строки, как «nl», вы получите неожиданные результаты, такие как проглатывание этих строк, разделов без нумерации или перезапуск нумерации с 1 в разделе. Используйте -dXY (где XY - пара символов, которые не встречаются в строке в вашем тексте), чтобы предотвратить это поведение. В общем случае это может быть трудно предсказать, поэтому я рекомендую использовать одно из других решений на этой странице. Jonathan Hartley 11 лет назад 2
Использование '-w1' не только удалит пробел после чисел, но также * урежет * номера строк до ширины всего в один символ, означая, что номера ваших строк отображают только их наименее значимые цифры. Это почти наверняка не то, что вы хотите. Jonathan Hartley 11 лет назад 0
С помощью `-nln` вы можете выравнивать по левому краю, если не хотите пробелов перед номерами строк. Также, чтобы указать разделитель табуляции, вы можете использовать `-s $ '\ t'` или` -s' '`(вставьте табуляцию между одинарными кавычками с помощью` ctrl + v`, затем `tab`). don_crissti 9 лет назад 4
@JonathanHartley `nl -w1` (из GNU coreutils 8.24) * не * усекает номера строк. Skippy le Grand Gourou 6 лет назад 1
Это не верно. Он пропускает / не считает строки, состоящие из номеров строк. Принятый ответ работает. oligofren 6 лет назад 0
49
pgs
awk '' < filename 
Или `awk ''`. jtbandes 15 лет назад 10
ответ ниже, с командной строкой nl, является гораздо более простым решением. Daniel Ribeiro 12 лет назад 0
@DanielRibeiro проще, но менее надежен и менее гибок. Jonathan Hartley 11 лет назад 2
@DanielRibeiro Ответ с использованием `nl` также НЕПРАВИЛЬЕН. В исходном коде он никогда не даст правильные номера строк, так как он не считает строки только с пробелами. oligofren 6 лет назад 0
9
Callum
sed = test.txt | sed 'N;s/\n/\t/' 

Команда «sed =» напечатает номер строки, за которым следует возврат каретки, а затем следующая строка.

Выражение «N; s / \ n / \ t /» будет занимать каждую строку, получать следующую строку (т.е. номер строки и строку) и заменять возврат каретки табуляцией.

Печатает букву "t" без табуляции с моей версией sed: 8t Я видел лучшие умы моего поколения, уничтоженные 9t безумием, истерически голодающими голыми, Richard Hoskins 15 лет назад 0
Обратите внимание, что `\ n` - это перевод строки (обычно называемый просто" новой строкой ", так как его первое широкое распространение было в Unix), а` \ r` - возврат каретки. Windows использует `\ r \ n` (также называемый` CRLF`). Camilo Martin 10 лет назад 0
(Yay придирки!) Camilo Martin 10 лет назад 0
Если мы собираемся вникать в то, как могут отличаться окна, то нам, возможно, придется рассмотреть UTF16. mc0e 7 лет назад 0
4
raspi
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/" 

cat -n добавляет бельевые числа как "123 linecontents", а регулярное выражение изменяет их на "linenumberTABlinecontents"

3
itsadok
perl -pe "s/^/$.\t$_/" file.txt 

или же

perl -ne "print qq($.\t$_)" file.txt 
2
innaM

Как насчет

cat -n somefile.txt 

?

Нет вкладки. (Комментарии, требующие 15 символов - глупое требование.) Richard Hoskins 15 лет назад 1
Это производит вкладки в моей системе. кошка (GNU coreutils) 6.10. innaM 15 лет назад 1
В моей системе добавляется (табуляция) числовой (пробел) строки. BSD Utils. Richard Hoskins 15 лет назад 0
2
P. Heffner

OK, Here's a one-line bash solution:

$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done $ IFS= 

The first IFS setting tells bash to read a full line at a time. The second line resets the IFS to default.

As an added bonus, it runs completely in your shell and doesn't exec a program!

1
chaos
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//' 

или для некоторых не-GNU sed:

cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//' 
Печатает букву "t" без табуляции с моей версией sed. Richard Hoskins 15 лет назад 0
Отредактировано для двойного побега; попробуй так. chaos 15 лет назад 0
Если ничего не помогает, просто нажмите вкладку. :) (Или вкладка ^ V, если ваша оболочка доставляет вам неприятности.) chaos 15 лет назад 0
sed: 1: "test.txt": неопределенная метка 'est.txt' Richard Hoskins 15 лет назад 0
'cat test.txt | sed -e 's / ^ / \\ t /' | cat -n 'печатает (табуляция) число (пробел) \ t (строка) Richard Hoskins 15 лет назад 0
Хорошо, две версии, вторая для вашего `sed`, обе избавляются от лидирующей вкладки` cat -n`. chaos 15 лет назад 0
Кстати, мой седан не старый. Это просто не GNU. :) Richard Hoskins 15 лет назад 0
Отмечено, отредактировано согласно. :) chaos 15 лет назад 0
1
nik

Хорошо, так как мы собираем способы сделать это,

 grep -n . file.txt | sed 's/\(^[0-9]*\):/\1 /g' # this is a tab with Ctrl-V + Tab =====> ----  
Теперь я вижу это. ОК, удалите мой собственный пост. Какие? Вы говорите, что SU не позволяет вам удалить свой пост? Kevin M 15 лет назад 0
grep + sed == awk Tadeusz A. Kadłubowski 15 лет назад 0

Похожие вопросы