编辑目录中的多个文本文件
Edit multiple text files in directory
我正在通过 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 文件中再添加 2 行(>ix_alpha = 0 和 alpha = .5)。
谢谢!
您可以使用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/
将 "pattern" 替换为 "replacement"
i text
插入文本
- 如果命令前面有
/pattern/
,则只有当前行与模式匹配时,命令才为 运行,即在这种情况下,这些行插入在 Small_Diff 之前行。
-i~
告诉 sed
替换文件 "in place",留下名称附加 ~
的备份(因此会有名为 tmp0001.ctl~
等)
我正在通过 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 文件中再添加 2 行(>ix_alpha = 0 和 alpha = .5)。
谢谢!
您可以使用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/
将 "pattern" 替换为 "replacement"i text
插入文本- 如果命令前面有
/pattern/
,则只有当前行与模式匹配时,命令才为 运行,即在这种情况下,这些行插入在 Small_Diff 之前行。 -i~
告诉sed
替换文件 "in place",留下名称附加~
的备份(因此会有名为tmp0001.ctl~
等)