sed正则表达式捕获组输出整个输入

时间:2017-08-09 16:14:43

标签: bash date sed

我尝试使用 sed 以获得以下输出>来自字符串09 Aug 2017 14:15:11

09/Aug/2017:14:15:11

当我使用以下代码

sed 's/^\(\d+\)\/\(\w+\)\/\(\d+\)\:\(.*\)$/\1 /p' <(echo "09/Aug/2017:14:15:11")

我将整个输入字符串作为输出: 09/Aug/2017:14:15:11

我这样做是为了对结果执行date -d命令,因为date -d 09/Aug/2017:14:15:11 +%s给了我这个错误:date: invalid date ‘09/Aug/2017:14:15:11’。 如果您有其他建议而不是使用 sed ,请不要犹豫提出建议。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用sed

$ echo "09/Aug/2017:14:15:11" | sed -e 's#/# #g' -e 's/:/ /'
09 Aug 2017 14:15:11

我们在这里使用两个search and replace命令,一个在另一个之后运行。第一个用空格(g/)替换全部(注意全局标志,)斜杠,第二个用第一个冒号替换第一个冒号({{1} }→:)(注意缺少标志)。两者都是搜索和替换命令(g),但第一个使用s作为分隔符而不是标准#,因此我们不必转义我们正在搜索的斜杠。

答案 1 :(得分:0)

我认为以下命令更好:

date "+%d %h %Y %H:%M:%S"