如何对文件每一行中的字符串进行编号

如何对文件每一行中的字符串进行编号

鉴于 file.txt 看起来像这样:

line_ some text
line_ some text
line_ some text

如何使用 Bash 对这样的行进行编号:

line_1 some text
line_2 some text
line_3 some text

到目前为止,这是我的想法,但它不起作用:

#!/bin/bash
var = 1
cat ./file.txt
while read line; do           
  sed "s/line_/line_(( var++ ))/"
done < ./file.txt 

答案1

您可以使用 awk:

awk '$1=$1 FNR' <file>

$1是每个记录的第一个单词(在本例中为行)。FNR是输入记录号(本例中为行号)。

该命令将每行的 替换first wordfirst word + line-number每行的 。

答案2

下面是如何在 perl 中执行此操作:

perl -pe 'print "line_$.  $_";'  [file(s)]

如果要将其发送到文件:

perl -pe 'print "line_$.  $_";'  [input_file] > [output_file]

答案3

在我看来,你在这里得到了很好的保护,但到底是什么:

sed -et -e's/_ /\n/;P;=;D' <in | paste -'d_ ' - - -  >out

sed不完全是数学系的高手,但有时朋友会帮助它作弊,所以它就过去了。

这改变了...

line_ some text
line_ some text
line_ some text

...到...

line_1 some text
line_2 some text
line_3 some text

答案4

好吧,看来您对 Shell/Bash 还很陌生,因此出于教育原因,这里有一个适合您的解决方案,涵盖您选择的技术(http://mywiki.wooledge.org/BashFAQ/001,http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion

var=1
while read -r Line; do 
  printf "%s\n" "${Line/line_/line_$var}" >> ./file-new.txt
  let var++
done < ./file.txt

相关内容