【发布时间】:2019-04-18 13:36:58
【问题描述】:
我有以下字符串:
setenv run_area1 root/test1/Apr14_2019_10_32_39/dummy
setenv area2 root/test2/Aug23_2017_14_25_56/dummy
setenv run_area3 testRun/test1/blue_Apr14_2019_08_56_48/dummy/
setenv area4 testRun/test2/Aug23_2017_14_26_03/thing2
我想用[DATE] 替换日期如下:
setenv run_area1 root/test1/[DATE]/dummy
setenv area2 root/test2/[DATE]/dummy
setenv run_area3 testRun/test1/blue[DATE]/dummy/
setenv area4 testRun/test2/[DATE]/thing2
我必须使用 sed,所以我编写了以下命令:
sed 's|[A-Z][a-z]*[0-9]*_[0-9]*_[0-9]*_[0-9]*_[0-9]*|[DATE]|g'
它适用于字符串,但适用于以下字符串:
setenv run_area3 testRun/test1/blue_Apr14_2019_08_56_48/dummy/
我明白了:
setenv run_area3 testRun/test1/blue_[DATE]/dummy/
我正在寻找一种在正则表达式中使用_ 的方法。在 perl 中,我知道我可以使用 (_|) 这样的东西,所以 _ 是可选的。我也可以使用?。
对于以前的线程,我看到基本的sed 不包括这些选项,我需要使用\{0,1\}。 (link)。
问题是,我似乎无法理解\{0,1\} 是如何解决它的。还有其他解决方案吗?
【问题讨论】:
-
没有时间测试,但我希望
's|_*[A-Z][a-z]*[0-9]*.......|....|能够工作。祝你好运。
标签: sed