我的文件名为A1.V5.76.txt,B5.CV.PH.txt包含以下文字:
这是文件名
的名称
我想将文本中的文字名称更改为实际文件名(扩展名除外)。
例如,上面的内容如下:
这是文件A1.V5.76
的名称
我已经尝试过以下代码,我已经编辑过一个旧项目,并将目录名称作为变量传递,但没有任何反应:
for file in *.melanie; sed -i "s/filename/$file/g"; done
我为不太好的代码道歉。我还在学习。
答案 0 :(得分:2)
您的命令中存在一些问题,您可以按照以下方式对其进行修改,
for file in *.melanie;do sed -i "s/filename/$file/g" $file; done
简要说明,
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