鉴于 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 word
为first 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