我正在通过Ubuntu终端使用bash。我想对目录中所有具有相同扩展名的文件进行相同的文本编辑。我的目录包含227个数字计数数据文件的多个版本。例如,我有:
tmp0001.ctl
tmp0001.out
tmp0001.trees
tmp0001.txt
tmp0002.ctl
tmp0002.out
tmp0002.trees
tmp002.txt
以此类推。
我要编辑的文件是扩展名为“ .ctl”的文件。目前,.ctl文件如下所示(尽管数字从tmp0001到227当然有所不同):
seqfile = tmp0001.txt
treefile = tmp0001.trees
outfile = tmp0001.out
noisy = 3
seqtype = 2
model = 0
aaRatefile =
Small_Diff = 0.1e-6
getSE = 2
method = 1
我想编辑.ctl文件,使它们显示为:
seqfile = tmp0001.txt
treefile = tmp0001.trees
outfile = tmp0001.out
noisy = 3
seqtype = 2
model = 2
aaRatefile = lg.dat
fix_alpha = 0
alpha = .5
ncatG = 4
Small_Diff = 0.1e-6
getSE = 2
method = 1
我不确定如何执行此操作,我猜想使用诸如nano或sed之类的编辑器,但是我不确定如何自动执行此操作。我想到了以下几点:
for file in *.ctl
do
nano
???
希望这不会太令人费解!本质上,我想更改已在其中的两行(模型和aaratefile),并在每个.ctl文件中再添加两行(> ix_alpha = 0和alpha = .5)。
谢谢!
答案 0 :(得分:-1)
您可以使用sed
来执行任务:
sed -e 's/model = 0/model = 2/; s/aaRatefile = /aaRatefile = lg.dat/' \
-e '/Small_Diff/ i fix_alpha = 0\nalpha = .5\nncatG = 4' \
-i~ *.ctl
s/pattern/replacement/
用“替换”替换“样式” i text
插入文本/pattern/
,则仅当当前行与模式匹配时才运行该命令,即,在这种情况下,将这些行插入Small_Diff行之前。-i~
告诉sed
替换文件“就地”,保留备份并在名称后附加~
(因此将有名为tmp0001.ctl~
的备份,依此类推。)