在多个文件的特定行中添加序号

在多个文件的特定行中添加序号

有人可以告诉我将序列号添加到文件中的特定行并将其添加到其他文件的命令吗?

例如:我有 5 个文件(消息) 在每个消息文件的第 5 行中,我想添加增量序列号,如主题:1,主题:2,主题:3 ...示例输出应如下所示。

File1: line5: Subject: **1** message
File2: line5: Subject: **2** message
File3: line5: Subject: **3** message
File4: line5: Subject: **4** message
File5: line5: Subject: **5** message

答案1

尝试使用以下命令并且工作正常

for i in 5; do sed -i ''$i'i subject '$i'' file1;j=$(($i+1)); sed -i  ''$i'i subject '$j'' file2;k=$(($j+1)); sed -i ''$i'i subject '$k' ' file3;l=$(($k+1));sed -i ''$i'i subject '$l'' file4;m=$(($l+1)); sed -i ''$i'i subject '$m'' file5;done

答案2

我会用perl

perl -pi -e 's/^Subject: \K/sprintf("%05d ", ++$n)/e' File*

Subject:在行首每次出现 后都会添加一个递增的数字(0 填充到宽度 5) 。

仅对于第一次出现:

perl -pi -e '
  unless ($found_already) {
    $found_already = 1 if s/^Subject: \K/sprintf("%05d ", ++$n)/e
  }
  $found_already = 0 if eof' File*

要添加Subject: <increasing-number>到每个文件的第 5 行:

perl -pi -e '$_ = sprintf("Subject: %05d %s", ++$n, $_) if $. == 5; 
             close ARGV if eof' File*

请注意,文件按照 shell 的 glob 扩展决定的顺序提供给 perl。对于大多数 shell,这就是词法顺序。如果文件名编号没有填充,则意味着File10将出现在File2.使用zshshell,您可以替换File*File*(n)按数字排序的列表或File*(Om)按文件的年龄(从最旧到最年轻)排序。

相关内容