我有大约70k行的文本文件,如下所示:
/dir1/dir2/dir3/2013/04/04/file.pdf
我需要将其转换为:
dir4/dir5/2013/04/4/file.pdf
重要的是,删除第6位的0
,该位置的值从1到31。任何人都可以帮忙吗?
答案 0 :(得分:0)
使用sed
:
sed -E 's@(/[^/]*){3}(/[0-9]+/[0-9]+/)0?([0-9]+.*)@dir4/dir5\2\3@' your_file
我们匹配将被忽略的第一组中的三个目录(如果sed
支持,我们将使用非捕获组),然后将第二组中的年和月匹配,然后选择前一天的0,然后一天的其余部分和第三组的文件名。替换模式仅指定新的路径根,然后引用第二和第三组。我使用@
作为定界符,以避免不必在模式和替换模式中将所有/
换行,在它们中找不到的任何字符也可以正常工作。