在文件中查找单词实例并将其更改为文件名

时间:2017-10-05 02:03:02

标签: sed

我的文件名为A1.V5.76.txt,B5.CV.PH.txt包含以下文字:

  

这是文件名

的名称

我想将文本中的文字名称更改为实际文件名(扩展名除外)。

例如,上面的内容如下:

  

这是文件A1.V5.76

的名称

我已经尝试过以下代码,我已经编辑过一个旧项目,并将目录名称作为变量传递,但没有任何反应:

for file in *.melanie; sed -i "s/filename/$file/g"; done

我为不太好的代码道歉。我还在学习。

2 个答案:

答案 0 :(得分:2)

您的命令中存在一些问题,您可以按照以下方式对其进行修改,

for file in *.melanie;do sed -i "s/filename/$file/g" $file; done

简要说明,

  • 您忘记了for for循环的单词do
  • 您忘记了sed命令的输入文件,因此请添加$file

修改这两个应该是好的。

答案 1 :(得分:0)

以下awk应该会帮助你。

awk '{sub("filename",FILENAME);print}' A1.V5.76.txt

所以上面将替换string" filename"将是Input_file的名称。如果您对上述命令的结果感到满意,那么您可以运行以下命令通过执行以下操作来更改Input_file本身。

awk '{sub("filename",FILENAME);print}' A1.V5.76.txt > temp_file && mv temp_file A1.V5.76.txt

编辑: 如果您想传递多个文件且其扩展名为* .txt,则以下内容可能对您有所帮助。

awk '
FNR==1{
  if(val){
   close(val);
   close("temp_file");
   system("mv temp_file " val)
};
  val=FILENAME
}
{
  sub("filename",FILENAME);
  print > "temp_file"
}
END{
  if(val){
   close("temp_file");
   system("mv temp_file " val)
}
}
' *.txt