【发布时间】:2016-07-27 11:32:24
【问题描述】:
我有一个包含这些行的文件:
s17 line linewidth 1.0
s18 line linewidth 1.0
.
.
.
s28 line linewidth 1.0
我想将这些行替换为:
s17 line linewidth 2.0
s18 line linewidth 2.0
.
.
.
s28 line linewidth 2.0
我已经用 bash 编写了这段代码:
#!/bin/bash
for VARIABLE in {17..28}
do
sed 's/s${VARIABLE} line linewidth 1\.0/s${VARIABLE} line linewidth 2\.0/g' ./band-structure-calcite.agr
done
然后我通过创建bash change.sh > changed.txt 运行代码,但文件changed.txt 不包含这些修改。
如果您在我学习 bash 时帮助我并解释您的代码答案的语法,我将不胜感激
【问题讨论】:
-
单引号不能插入变量,双引号可以。
-
运行
sedN 次效率低下并且会给你许多重复的输出行(每行的N 个副本,每个副本的一个 被适当地修改)。如果您只想在匹配这些数字(可能不是其他数字)的行上将1.0更改为2.0,有更好的方法来做到这一点。 -
@choroba :我已将脚本更改为:
sed "s/s${VARIABLE} line linewidth 1\.0/s${VARIABLE} line linewidth 2\.0/g" ./band-structure-calcite.agr,但它不起作用 -
@EtanReisner :...“如果您只想在匹配这些数字的行上将
1.0更改为2.0(可能不是其他数字)”...不,我想将字符串s17 line linewidth 1.0更改为s17 line linewidth 2.0;s18 line linewidth 1.0s18 line linewidth 2.0等等,如上所示。出现在字符串s右侧的整数从17变为28:s17, s18, s19 ... s28 -
是的,但您不会将行的
s##部分更改为1.0到2.0,不是吗?因此,您的匹配等的其余部分并没有做太多,除非有 other 行具有s##值,而您 不想 想要更改1.0.
标签: python bash variables for-loop sed