【问题标题】:sed wildcard not behaving as expectedsed 通配符未按预期运行
【发布时间】:2018-05-07 23:24:09
【问题描述】:

尝试将“/data/kollman/appion/*/relion/micrographs”替换为“micrographs”

sed -i 's/\/data\/kollman\/appion\/.*\/relion\/micrographs/micrographs/g' micrographs_all_gctf.star

每行需要两次更正。

/data/kollman/appion/17nov14d/relion/micrographs/00001_nonDW.mrc /data/kollman/appion/17nov14d/relion/micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875    74.539665   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.032973     3.656274
/data/kollman/appion/17nov14d/relion/micrographs/00002_nonDW.mrc /data/kollman/appion/17nov14d/relion/micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453    48.760956   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.034282     3.727132

需要变成这样:

micrographs/00001_nonDW.mrc micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875    74.539665   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.032973     3.656274
micrographs/00002_nonDW.mrc micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453    48.760956   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.034282     3.727132

但是,我得到的结果是这样的:

micrographs/00001_nonDW.ctf:mrc 18326.289062 19408.296875    74.539665   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.032973     3.656274
micrographs/00002_nonDW.ctf:mrc 19867.357422 20695.939453    48.760956   120.000000     2.120000     0.200000 87500.000000    14.000000    -0.034282     3.727132

问题似乎是我在这里使用通配符的方式。我需要它,因为文件夹结构的那部分总是不同的,因为这个命令旨在推广到所有这样的文件夹结构。星号代表日期,它总是在变化。

无论如何,通配符会按预期替换日期,但看起来它一直延伸到日期之后并跨越到需要替换的第二个实例。结果是它在每一行删除了文件结构的一个条目。

【问题讨论】:

    标签: sed replace wildcard


    【解决方案1】:

    您的通配符 .* 匹配所有字符,直到 /relion/micrographs 的第二个实例。您需要一个更具确定性的模式。

    另外,使用不同的 sed 表达式分隔符,这样您就不需要转义每个 /

    sed -E 's#/data/kollman/appion/[^ ]+/relion/micrographs#micrographs#g' file
    
    • 字符类[^ ] 确保我们只匹配非空格字符,并防止贪婪匹配会吞噬所有字符直到/relion/micrographs 的第二个实例。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多