rm 屏幕上打印的“==”右侧的所有文件

rm 屏幕上打印的“==”右侧的所有文件

我有一个打印的脚本:

dhcp-18-189-47-44:CE06_getting_new_fit myname$ ./find-duplicate-structures.sh custom_structures new_GS_calculation/selected/POSCAR_00*
../CE05-structures_recombined/enum-00135/POSCAR.ideal == new_GS_calculation/selected/POSCAR_0011 (RMSD = 1.15475827927e-06, max. displacement = 1.41428428091e-06)
../CE05-structures_recombined/enum-00146/POSCAR.ideal == new_GS_calculation/selected/POSCAR_0022 (RMSD = 1.16051714442e-06, max. displacement = 1.42835572031e-06)
../CE05-structures_recombined/enum-00150/POSCAR.ideal == new_GS_calculation/selected/POSCAR_0027 (RMSD = 3.40556388834e-16, max. displacement = 6.04819551804e-16)
../CE05-structures_recombined/enum-00151/POSCAR.ideal == new_GS_calculation/selected/POSCAR_0027 (RMSD = 4.01650747941e-16, max. displacement = 5.4726685759e-16)
../CE05-structures_recombined/enum-00163/POSCAR.ideal == new_GS_calculation/selected/POSCAR_0037 (RMSD = 1.99174954223e-06, max. displacement = 2.44948961046e-06)

在内部,脚本如下所示:

dirs=$1
shift
while read dir
do
if [ -f $dir/POSCAR.ideal ]
then poscar=$dir/POSCAR.ideal
else poscar=$dir/POSCAR
fi
mg match --just-match $poscar $@
done < $dirs

exit 0

打印发生在 mg match --just-match $poscar $@ 行

但是,在我的实践中,我想将所有内容删除到右侧的“==”,即:

rm new_GS_calculation/selected/POSCAR_0011
rm new_GS_calculation/selected/POSCAR_0022
rm new_GS_calculation/selected/POSCAR_0027
rm new_GS_calculation/selected/POSCAR_0037

如何在 shell 脚本中自动执行此过程?谢谢 。

答案1

sed您可以尝试使用以下命令解析程序的输出并执行:

$(./YOUR_PROGRAM | sed s/^.*==/rm/ | sed s/\ \(.*//)

将执行(从你的例子)

rm new_GS_calculation/selected/POSCAR_0011
rm new_GS_calculation/selected/POSCAR_0022
rm new_GS_calculation/selected/POSCAR_0027
rm new_GS_calculation/selected/POSCAR_0027
rm new_GS_calculation/selected/POSCAR_0037


sed使用以下语法:

sed s/string1/string2/

替换string1string2.

这里发生的事情是:

  1. 程序的输出sed通过第一个管道发送到|
  2. 对于输出的每一行,sed从开头(用 标记^)到==符号的所有内容都将其替换为字母rm。它将该行的其余部分发送到sed带有第二个管道的另一个调用中
  3. sed现在查找并删除一个空格,后跟一个左括号,用 表示\ \(,以及后面的任何内容,用 表示.*
  4. 整个命令被包装起来,$(...)以便 bash 执行输出,在本例中是一串rm new_GS_calculation/... 命令。

相关内容