sed 将文件名的一部分复制到具有相同子字符串的文件的另一个内容中

sed 将文件名的一部分复制到具有相同子字符串的文件的另一个内容中

对于一个目录中具有指定扩展名的每个文件,我想仅使用文件名中的一个子字符串添加到另一个文件,并输出为具有不同扩展名但相同子字符串的文件。

我发现了一些与我想做的类似的例子,但我正在编写一个 bash 脚本,所以我遇到了一些挑战,我很难找到例子。

例如,我将从 filename.sample 开始,并且只需要子字符串“filename”。

我试图做的是:

for i in /path/to/*.sample
do
   bar="${i%%.sample*}"
   sed "s/^>\(.*\)/>\1;label=${bar##*/};/" "$i" > "$i"_bar  \;
done

文件内容*.sample如下:

*.sample

> MEWFJWRNFF_141
AB28974UJBDASX

期望的输出是:

Output_bar
> MEWFJWRNFF_141; label=filename;
AB28974UJBDASX

如果我有任何不清楚的地方,请告诉我!谢谢你!

答案1

for i in /path/to/*.sample
do
    str="; label=$(basename -s.sample $i);"
    sed "/^>/ s/$/$str/" "$i"
done
  • basename命令仅给出文件名,去掉路径。并将-s.sample剥离扩展
  • 所以,如果i/path/to/filename.samplestr将包含; label=filename;
  • /^>/ s/$/$str/将找到以 开头的行>并将变量的内容添加str到该行的末尾

我不明白你希望如何命名输出文件。如果i/path/to/filename.sample"$i"_bar将给出/path/to/filename.sample_bar

相关内容