42

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

9 ответов9

51

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

nl lines.txt
 1  $bkWTN
 2  $cV8$.
49
awk '{printf "%d\t%s\n", NR, $0}' < filename
9
sed = test.txt | sed 'N;s/\n/\t/'

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

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

4
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"

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

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

или же

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

ОК, вот решение для одной строки:

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

Первая настройка IFS указывает bash читать всю строку за раз. Вторая строка сбрасывает IFS по умолчанию.

В качестве дополнительного бонуса, он полностью запускается в вашей оболочке и не запускает программу!

2

Как насчет

cat -n somefile.txt

?

1

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

 grep -n . file.txt | sed 's/\(^[0-9]*\):/\1    /g'
 # this is a tab with Ctrl-V + Tab  =====>  ---- 
1
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//'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .