替换字符串中的值

时间:2018-07-30 13:44:34

标签: linux bash

我有大约70k行的文本文件,如下所示:

/dir1/dir2/dir3/2013/04/04/file.pdf

我需要将其转换为:

dir4/dir5/2013/04/4/file.pdf

重要的是,删除第6位的0,该位置的值从1到31。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

使用sed

sed -E 's@(/[^/]*){3}(/[0-9]+/[0-9]+/)0?([0-9]+.*)@dir4/dir5\2\3@' your_file

我们匹配将被忽略的第一组中的三个目录(如果sed支持,我们将使用非捕获组),然后将第二组中的年和月匹配,然后选择前一天的0,然后一天的其余部分和第三组的文件名。替换模式仅指定新的路径根,然后引用第二和第三组。我使用@作为定界符,以避免不必在模式和替换模式中将所有/换行,在它们中找不到的任何字符也可以正常工作。

Try it online !