首页 > 解决方案 > 将行号附加到 sed 中的选定行

问题描述

对于许多附件,我有一封带有相同名称“priloha”的损坏的电子邮件。

--=_6307cd41740728f4463731ed=a0cf2ceb-1b64-55a3-9dc3-738b8e19552b_=
Content-Type: image/jpeg;
name=priloha
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
size=50103;
filename=priloha

tABRRRQB/9k=
--=_6307cd41740728f4463731ed=a0cf2ceb-1b64-55a3-9dc3-738b8e19552b_=
Content-Type: image/jpeg;
name=priloha
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
size=59445;
filename=priloha

我需要以这种方式将行号附加到单词“priloha”或使用单词“priloha”修改行:

name=priloha23
filename=priloha34
name=priloha134
filename=priloha145

还有更多这样的线条,当然还要保持线条之间。

这些数字可以是任何唯一标识符,比如行号。

我有一个有效的以下脚本:

sed 's/\r//g' input.eml >output.eml # dos end of lines into unix ones
for i in {10..50} # cca 30 attachments to procede 
 do
  sed -i "0,/name=priloha$/s//name=priloha$i/"        output.eml
  sed -i "0,/filename=priloha$/s//filename=priloha$i/"  output.eml
 done

你大概会承认它有点笨拙。你能告诉我如何一次完成。像这样的东西:

sed "/name=priloha/s/name=priloha/name=priloha[当前行#]/" input.eml > output.eml # 不工作

期望:找到带有“name=priloha”的行将其更改为“name=priloha[当前行#]”

我期待您的聪明想法,并在此先感谢您!

标签: sed

解决方案


如果您对awk.

awk '{sub(/priloha/,"&"FNR)} 1'  Input_file

这将priloha用字符串和行字符串和行号替换字符串。

一旦您对上述命令(在终端上打印输出)没问题,并且如果您想将输出保存到 Input_file 本身。

awk '{sub(/priloha/,"&"FNR)} 1' Input_file > temp && mv temp Input_file

推荐阅读