更改sed-sed中许多文件的最后一行只更改第一行



这是我的脚本

#!/bin/bash
for num in {1..100}; 
do 
sed '$s/ 6.36535    23.3762512.09434/   6.76889  21.76071  12.19032/' eq8_$num.gro | tee eq9_$num.gro
done

我想替换"6.36535 23.3762512.09434"到"6.76889 21.76071 12.19032"(在这种情况下,空格很重要,文件的行数不同,这是每个文件的最后一行(。

Sed只处理第一个文件。输入示例

eq8_1.gro

900 mgdg molecules in water t= 600000.00000 step= 400000000
177255
227BGL     C529155   4.134  15.788   5.556
227BGL     H529156   4.186  15.879   5.529
19144SOL     OW73518   0.911  13.325   6.427
19144SOL    HW173519   0.879  13.256   6.485
20389SOL     OW77253   0.644  14.144   5.376
20389SOL    HW177254   0.712  14.203   5.344
6.36535    23.3762512.09434

eq8_2.gro

900 mgdg molecules in water t= 600000.00000 step= 400000000
177255
19922SOL    HW175853   4.186  14.169   5.941
19922SOL    HW275854   4.071  14.076   5.973
19924SOL     OW75858   1.466  20.721   5.803
19924SOL    HW175859   1.489  20.642   5.852
6.36535    23.3762512.09434

输出示例

eq9_1.gro

900 mgdg molecules in water t= 600000.00000 step= 400000000
177255
227BGL     C529155   4.134  15.788   5.556
227BGL     H529156   4.186  15.879   5.529
19144SOL    HW173519   0.879  13.256   6.485
19144SOL    HW273520   1.007  13.318   6.431
20389SOL    HW177254   0.712  14.203   5.344
20389SOL    HW277255   0.577  14.201   5.413
6.76889  21.76071  12.19032

eq9_2.gro(最后一行没有更改,为什么?(

900 mgdg molecules in water t= 600000.00000 step= 400000000
177255
19922SOL     OW75852   4.097  14.168   5.977
19922SOL    HW175853   4.186  14.169   5.941
19924SOL     OW75858   1.466  20.721   5.803
19924SOL    HW175859   1.489  20.642   5.852
6.36535    23.3762512.09434

我也尝试不同的方法

#!/bin/bash
for num in {1..100}; 
do 
sed -i '$s/ 6.36535    23.3762512.09434/   6.76889  21.76071  12.19032/' eq8_$num.gro
done

它也不起作用。

如果你不知道如何在sed中这样做,也许你知道如何在awk中这样做?

您可能需要确保文件末尾有一个换行符。CCD_ 1的实现通常对CCD_。考虑例如

sed -i.bak -e '$a' file

如果你的外壳允许,甚至更好:

[ -n "$(tail -c1 file)" ] && printf 'n' >>file 

这可能适用于您(GNU sed和并行(:

parallel -q sed -s '$s/ 6.36535    23.3762512.09434/   6.76889  21.76071  12.19032/' ::: eq8_{1..100}.gro

这将把上述sed替换命令应用于从eq8_1.groeq8_100.gro的100文件的最后一行。

输出将到达stdout,并且可以捕获> outFile

注意:原始文件不会被修改。

如果原始文件需要修改到位,请使用:

parallel -q sed -i.backup '$s/ 6.36535    23.3762512.09434/   6.76889  21.76071  12.19032/' ::: eq8_{1..100}.gro

要保留原始文件并生成带有修改的新文件,请使用:

parallel sed -s ''$s/ 6.36535    23.3762512.09434/   6.76889  21.76071  12.19032/'' > {.}.new.txt ::: eq8_{1..100}.gro

你尝试过sed-i的s/Pattern1/Pattern2/g'吗?g最终对文件中所有匹配的模式进行全局替换。

最新更新