Linux 替换字符串中的值

Linux 替换字符串中的值,linux,bash,Linux,Bash,我有一个约70k行的文本文件,如下所示: /dir1/dir2/dir3/2013/04/04/file.pdf 我需要将其转换为: dir4/dir5/2013/04/4/file.pdf 重要的是删除第6位的前导0,该位置的值从1变为31。有人能帮忙吗?使用sed: sed -E 's@(/[^/]*){3}(/[0-9]+/[0-9]+/)0?([0-9]+.*)@dir4/dir5\2\3@' your_file 我们在第一组中匹配将被忽略的三个DIR(如果sed支持,我们将使用非

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

/dir1/dir2/dir3/2013/04/04/file.pdf
我需要将其转换为:

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

重要的是删除第6位的前导
0
,该位置的值从1变为31。有人能帮忙吗?

使用
sed

sed -E 's@(/[^/]*){3}(/[0-9]+/[0-9]+/)0?([0-9]+.*)@dir4/dir5\2\3@' your_file
我们在第一组中匹配将被忽略的三个DIR(如果
sed
支持,我们将使用非捕获组),然后在第二组中匹配年和月,然后选择当天的前0,然后在第三组中匹配当天的其余部分和文件名。替换模式只指定新的路径根,然后引用第二组和第三组。我使用
@
作为分隔符,以避免在模式和替换模式中看到所有
/
,在模式和替换模式中找不到的任何字符也可以使用

请避免“给我密码”的问题,因为这些问题已经被问了很多次,你必须努力避免找到答案。而是显示您正在处理的脚本,并说明问题所在。也看到