有人可以告诉我将序列号添加到文件中的特定行并将其添加到其他文件的命令吗?
例如:我有 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
.使用zsh
shell,您可以替换File*
为File*(n)
按数字排序的列表或File*(Om)
按文件的年龄(从最旧到最年轻)排序。