这是我的脚本
#!/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.gro
到eq8_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最终对文件中所有匹配的模式进行全局替换。