在bash中循环以替换文本文件中的字符串

时间:2019-01-22 20:34:49

标签: bash for-loop replace

我需要通过修改现有文件中的字符串来生成新文件。

我有一个名为newheader.txt的文本文件,看起来像这样:

@RG     ID:$FILENAME     SM:$FILENAME

我还有一个名为filenames.txt的文本文件,如下所示:

ZF-150-81_S49
ZF-150-82_S55
ZF-150-83_S59

我希望有一个for循环,一次遍历filenames.txt并将newheader.txt中的$ FILENAME字符串替换为filenames.txt中的行,并将它们分别转换为新的.txt文件标题中带有该行。

这将创建三个输出文件。例如,第一个输出文件将称为ZF-150-81_S49.header.txt,其内部应如下所示:

@RG     ID:ZF-150-81_S49     SM:ZF-150-81_S49

换句话说,是这样的:

for $FILENAME in filename.txt; do replace $FILENAME in newheader.txt > $FILENAME.header.txt ; done

我已经完成了bash for loops,但不是需要替换文本文件中的字符串的地方。如果这样做更有意义,则对其他解决方案(例如perl)感到高兴。感谢您的协助。

2 个答案:

答案 0 :(得分:1)

类似这样的东西...(未经测试)

$ while read -r f; do sed 's/$FILENAME/'"$f"'/g' header > "$f".header; done < filename.list

答案 1 :(得分:1)

使用

for f in $(cat filename.txt); do
  sed -e "s/\$FILENAME/${f}/g" newheader.txt >${f}.header.txt
done