如何使用xargs和sed在bash中找到表达式并替换为.txt的文件名?

时间:2015-11-04 20:28:04

标签: bash sed xargs

我想在特定文件中找到一个表达式,并将其替换为脚本中使用的文件的当前名称。我目前的剧本是:

for FILE in ../pdb/*; 

    do

    basename $FILE .pdb | xargs -I '{}' sed -i  's/_final.pdb/{}_final.pdb/g' ./temp.txt

    ./program < temp.txt

    done

psfgen.inp中的输出包含每个文件的名称,而不仅仅是当前文件:

writepdb fileAfileBfileC_final.pdb

它应该:

writepdb fileA_final.pdb

如何替换temp.txt中的当前basename,让程序在从循环中写下一个basename之前使用temp.txt,而不是在执行程序之前写入文件夹中所有文件的basename?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,答案只是替换这样的整行:

for FILE in ../pdb/*; 

    do

    basename $FILE .pdb | xargs -I '{}' sed -i  '/_final.pdb/c\writepdb {}_final.pdb' ./temp.txt

    ./program < temp.txt

    done