Você pode listar os nomes de qualquer arquivo .smi
no qual qualquer linha contenha dois espaços adjacentes com
grep --include='*.smi' -rl ' ' .
Se você deseja imprimir as linhas, remova a opção l
.
Eu tenho 23 pastas e cada pasta tem duas subpastas (sempre o mesmo nome) e cada subpasta tem exatamente dois arquivos (sempre o mesmo nome). Então parece com isso:
Folder1/BindingDB/chiral.smi
nochiral.smi
Folder1/Xray/chiral.smi
nochiral.smi
Folder2/BindingDB/chiral.smi
nochiral.smi
Folder2/Xray/chiral.smi
nochiral.smi
Por exemplo, o arquivo chiral.smi
tem esta aparência:
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
Então, aqui, as duas últimas linhas K00000005
e K00000006
têm espaço duplo e quero combinar essas duas linhas.
Estou tentando verificar novamente todos os arquivos chiral.smi
e nochiral.smi
em minhas pastas, se eles tiverem linhas com espaço duplo (eu deveria ter apenas um espaço em cada linha de cada arquivo).
Eu tentei bash algo assim:
for i in */*/*.smi ; do sed -e "s/\s\{2,\}/ /g" $i; done
, mas não está funcionando. Além disso, quando executo sed -e "s/\s\{3,\}/ /g" *smi
na subpasta (BindingDB ou Xray), ele imprime todas as linhas que possuem apenas um espaço. Alguém pode me ajudar desde que eu não consigo descobrir qual é o problema?
Você pode listar os nomes de qualquer arquivo .smi
no qual qualquer linha contenha dois espaços adjacentes com
grep --include='*.smi' -rl ' ' .
Se você deseja imprimir as linhas, remova a opção l
.
Se eu entendi corretamente, algo como
grep -l ' ' */*/*.smi
imprime os nomes de "espaço duplo"
Se você quiser normalizar os espaços ( ' '
- > ' '
) você pode tentar
sed -ri.bak 's/\s{2,}/ /g' */*/*.smi
e remova os arquivos de backup se tudo correr bem
rm /*/*.smi.bak