如何在文本文件的每一行前添加行号和制表符?

Ric*_*ins 52 unix bash

如何在文本文件的每一行的开头附加行号和制表符?

小智 59

nl 命令应该这样做,但它也会在行号之前添加空格。它是 Linux coreutils 的一部分。

nl lines.txt
 1  $bkWTN
 2  $cV8$.
Run Code Online (Sandbox Code Playgroud)

  • 实际上,你可以告诉 `nl` 省略数字前的空格。只需使用 `-w1` 选项告诉它一个数字的最小宽度是 1。 (5认同)
  • 使用`-nln`,如果您不想要行号前的空格,您可以左对齐。此外,要指定制表符分隔符,您可以使用 `-s$'\t'` 或 `-s' '`(在单引号之间插入一个制表符,使用 `ctrl+v` 然后是 `tab`)。 (4认同)
  • 请注意,“nl”默认假定您的文本被拆分为带有页眉和页脚的“页面”,所有页面均由“\:”或“\:\:”或“\:\:\:”等行分隔。如果您的文本中有任何这样的行,那么 'nl' 将产生意想不到的结果,例如吞下这些行、没有编号的部分,或者在一个部分中从 1 重新开始编号。使用 -dXY(其中 XY 是文本中不会单独出现在一行上的一对字符)来防止这种行为。在一般情况下,这可能很难预测,因此我建议使用此页面上的其他解决方案之一。 (2认同)
  • @JonathanHartley `nl -w1`(来自 GNU coreutils 8.24)不会*不*截断行号。 (2认同)

pgs*_*pgs 52

awk '{printf "%d\t%s\n", NR, $0}' < filename
Run Code Online (Sandbox Code Playgroud)

  • 或者 `awk '{print NR, "\t", $0}'`。 (12认同)
  • 下面的答案,使用 nl 命令行,是一个更简单的解决方案。 (2认同)
  • @DanielRibeiro 更简单但不太可靠且不太灵活。 (2认同)

Cal*_*lum 10

sed = test.txt | sed 'N;s/\n/\t/'
Run Code Online (Sandbox Code Playgroud)

命令“sed =”将打印行号,然后是回车,然后是下一行。

表达式 "N;s/\n/\t/" 将获取每一行,获取下一行(即行号和行),并用制表符替换回车符。


ras*_*spi 5

cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"
Run Code Online (Sandbox Code Playgroud)

cat -n 将行号添加为“123 linecontents”,并且正则表达式将其修改为“linenumberTABlinecontents”