使用awk或sed替换_之前的字符串

时间:2017-12-01 12:11:00

标签: linux shell unix awk sed

我正在编写一个脚本,要求我在列出期间在文件名中替换_之前的单词。详情如下。

示例输入:

2017.12.01_07
2017.12.01_07
2017.12.01_06
2017.12.01_06
2017.12.01_05
2017.12.01_06
2017.12.01_05
2017.12.01_06
2017.12.01_08

我希望将_之前的当前日期替换为1周的日期

我想替换的日期: - DATE_SEC=$(date -d '7 day ago' +'%Y.%m.%d').

预期产出:

2017.12.01_08 should change to 2017.11.24_08

此致

的Dinesh

3 个答案:

答案 0 :(得分:0)

GNU sed 解决方案:

sed -En 's/\./-/g; s/^([^_]+)(_.*)/date -d"\1 + 1 week ago" +%Y.%m.%d\2/ep' file

输出:

2017.11.24_07
2017.11.24_07
2017.11.24_06
2017.11.24_06
2017.11.24_05
2017.11.24_06
2017.11.24_05
2017.11.24_06
2017.11.24_08
  • e - 此命令允许用户将shell命令的输入传输到模式空间。如果进行了替换,则执行在模式空间中找到的命令,并将模式空间替换为其输出
  • p - 如果进行了替换,则打印新的模式空间

答案 1 :(得分:0)

希望这能完成你的工作,

ls | awk -F'_' -v var=$(date -d '7 day ago' +'%Y.%m.%d') '{print var_$2}'

说明:

ls -->我在这里使用了文件列表选项,如果需要,我们可以更改来自其他来源,例如文件FileList.txt。然后我们可以使用cat FileList.txt

| --> ls 的输出重定向到 awk

-F -->设置awk

的分隔符

-v var= -->定义了可在awk print

中使用的变量

$2 -->打印出分隔的第二个字段

答案 2 :(得分:0)

contoso.sharepoint.com,123,145 解决方案:

contoso.sharepoint.com,fffdf23f-1234-1234-a744-17e2e196e777,1481eca1-4567-4567-8dbc-60c666ab3b8c

输出:

Bash