就像这里的其他一些问题一样,我正在尝试使用sed来替换文件中的文本。这是在sh脚本的上下文中我用来运行分析代码(可执行文件:“turns2d_over”)多次,每次运行后稍微修改输入(包含在文件“steady”中)。我试图替换的特定行如下所示,其中X.X是一个数字:
ALFA = X.X EXPLANATION
但是......而不是用ALFA = YY(一个不同的数字)替换ALFA = XX,sed要么什么也不做,或者在我放入下面的情况下(这是我当前的sh脚本的副本),它会删除整个文件中的所有文本......这是无用的。
TOT_VALS=9
ALPHAS[1]=-2.0
ALPHAS[2]=0.0
ALPHAS[1]=2.2
ALPHAS[4]=4.5
ALPHAS[5]=6.3
ALPHAS[6]=8.3
ALPHAS[7]=10.2
ALPHAS[8]=12.2
ALPHAS[9]=14.4
cd ./naca0008
for VAL in $(seq 1 $TOT_VALS); do
sed -n -i 's/ALFA = .*/ALFA = '${ALPHAS[$VAL]}'/g' steady
./turns2d_over<steady
mv 'fort.1' 'grid_in' # rename input grid to save from bulk move
mv 'fort.8' 'fort.q' # rename soln & grid outputs
mv 'fort.9' 'fort.g'
mkdir ./'alfa='${ALPHAS[$VAL]}/; mv 'fort.'* *'.dat' $_ # move files
cp 'steady' $_
mv 'grid_in' 'fort.1' # ready input grid for next run
done
那是怎么回事?
答案 0 :(得分:1)
您需要删除-n或在sed命令末尾添加p。 -n表示sed不会自动打印模式空间(p将打印当前匹配)。
如果你想让sed单独保留文件的其余部分(稳定),那么删除-n。
sed -i 's/ALFA = .*/ALFA = '${ALPHAS[$VAL]}'/g' steady
如果您希望sed删除文件的其余部分(稳定)并仅打印匹配的ALFA行,请像这样添加p:
sed -n -i 's/ALFA = .*/ALFA = '${ALPHAS[$VAL]}'/gp' steady