尝试用“显微照片”替换“/ data / kollman / appion / * / relion / 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
问题似乎是我在这里使用通配符的方式。我需要拥有它,因为文件夹结构的那一部分总是会有所不同,因为这个命令可以推广到像这样的所有文件夹结构。星号是日期,总是会改变。
无论如何,外卡取代了预期的日期,但看起来它一直延伸到日期之后并且越过需要替换的第二个实例。结果是它删除了每行上的一个文件结构条目。
答案 0 :(得分:0)
您的通配符.*
匹配所有字符,直到/relion/micrographs
的第二个实例。你需要一个更确定的模式。
另外,使用不同的sed表达式分隔符,这样您就不需要转义每个/
:
sed -E 's#/data/kollman/appion/[^ ]+/relion/micrographs#micrographs#g' file
[^ ]
确保我们仅匹配非空格字符,并防止可能吞噬所有字符的贪婪匹配,直到/relion/micrographs
的第二个实例。