Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法简化下面的sed?_Sed - Fatal编程技术网

有没有办法简化下面的sed?

有没有办法简化下面的sed?,sed,Sed,有没有一种方法可以简化以下sed(不使用另一个二进制文件,仅使用sed),同时牢记重新排列数字块的要求 echo "server16 :: FetchChannels.20160131.170019.875685.16232510.22" | sed -e 's/\ \:\:\ \([a-zA-Z]*\)\.\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\ \ \5\:

有没有一种方法可以简化以下
sed
(不使用另一个二进制文件,仅使用sed),同时牢记重新排列数字块的要求

echo "server16 :: FetchChannels.20160131.170019.875685.16232510.22" |
sed -e 's/\ \:\:\ \([a-zA-Z]*\)\.\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\ \ \5\:\6\:\7\ \4\/\3\/\2\ \ \1/g' \
    -e 's/\..*//g'
样本输出:

server16  17:00:19 31/01/2016  FetchChannels
  • 在Mac OS X上使用
    -Ee
  • 添加
    -r
    (或OSX上的-E)以删除一些
    \
  • /
    更改为
    |
    ,因此
    /
    不需要转义
这可能适合您(GNU-sed):

匹配的
::
很可能使其成为唯一的匹配

或者,如果您愿意:

sed 's/\(.*\)::\(.*\)\.\(....\)\(..\)\(..\)\.\(..\)\(..\)\(..\).*/\1\6:\7:\8 \5\/\4\/\3\2/' file

干得好。只有C shell在管道符号后需要反斜杠;真正的Shell不会。可以说,使用ISO 8601日期格式输出会更好,例如
2016-01-31 17:00:19
——这样更容易排序,等等,并且文化中立(或对每个人来说都是“外来的”)。
sed -r 's/(.*)::(.*)\.(....)(..)(..)\.(..)(..)(..).*/\1\6:\7:\8 \5\/\4\/\3\2/' file
sed 's/\(.*\)::\(.*\)\.\(....\)\(..\)\(..\)\.\(..\)\(..\)\(..\).*/\1\6:\7:\8 \5\/\4\/\3\2/' file