У меня есть 23, папки и каждая папка имеют две подпапки (всегда то же имя), и каждая подпапка имеет точно два файла (всегда то же имя). Таким образом, это похоже на это:
Folder1/BindingDB/chiral.smi
nochiral.smi
Folder1/Xray/chiral.smi
nochiral.smi
Folder2/BindingDB/chiral.smi
nochiral.smi
Folder2/Xray/chiral.smi
nochiral.smi
Например, chiral.smi
файл похож на это:
COCCNC(=O)[C@H]1[C@@H]([C@H]2CN3C(=O)C=CC=C3[C@@H]1N2C4=NC(=C(S4)C5=CC=CC=C5)C6=CC=C(C=C6)Cl)CO K00000004
C1[C@H]2[C@H](C=C([C@H]3[C@@H]2[C@H]4[C@@H]1[C@@H]([C@H]4C=C3)CC/C=C/CC5=CC=C(C=C5)O)C(=O)O)O K00000005
C[C@]12CCC[C@@]([C@@H]1CC[C@@]34[C@H]2C[C@H]5[C@@H](C3)[C@]5(C4)CO)(C)C(=O)O K00000006
Таким образом, здесь, последние две строки K00000005
и K00000006
имейте двойной интервал, и я хочу соответствовать этим двум строкам.
Я пытаюсь проверить все дважды chiral.smi
и nochiral.smi
файлы в моих папках, если у них есть строки, которые имеют двойной интервал (у меня должно только быть одно пространство в каждой строке каждого файла).
Я попробовал в ударе что-то вроде этого:
for i in */*/*.smi ; do sed -e "s/\s\{2,\}/ /g" $i; done
но это не работает. Кроме того, когда я работаю sed -e "s/\s\{3,\}/ /g" *smi
в подпапке (BindingDB или Рентгеновский луч) это печатает все строки, которые имеют только одно пространство. Кто-либо может помочь мне, так как я не могу выяснить то, что проблема?
Можно перечислить имена из любого .smi
файлы, в которых любая строка содержит два смежных пробелов с
grep --include='*.smi' -rl ' ' .
, Если Вы хотите произвести сами строки, затем удалите l
опция.
Если я пойму это правильно, то что-то как
grep -l ' ' */*/*.smi
распечатает имена файлов "двойного интервала"
, Если Вы захотите, действительно нормализуют пробелы (' '
-> ' '
) можно попробовать к
sed -ri.bak 's/\s{2,}/ /g' */*/*.smi
и удалить файлы резервных копий, если все подходили
rm /*/*.smi.bak