匹配具有多个空格的行并打印它们

匹配具有多个空格的行并打印它们

我有 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

所以这里,最后两行K00000005K00000006双倍空格,我想匹配这两行。

我尝试仔细检查文件夹中的所有chiral.smi文件nochiral.smi是否都有双倍空格的行(每个文件的每一行应该只有一个空格)。

我曾在 bash 中尝试过这样的事情:

for i in */*/*.smi ; do sed -e "s/\s\{2,\}/ /g" $i; done但它不起作用。此外,当我sed -e "s/\s\{3,\}/ /g" *smi在子文件夹(BindingDB 或 Xray)中运行时,它会打印所有只有一个空格的行。有人能帮我吗,因为我搞不清楚问题出在哪里?

答案1

您可以列出名称任何.smi文件中任何行包含两个相邻空格

grep --include='*.smi' -rl '  ' .

如果您想输出行本身,请删除该l选项。

答案2

如果我理解正确的话,就像

grep -l '  ' */*/*.smi

将打印“双倍空间”文件名

如果你想要规范化空格(' '-> ' '),你可以尝试

sed -ri.bak 's/\s{2,}/ /g' */*/*.smi

如果一切顺利,删除备份文件

rm /*/*.smi.bak

相关内容