有没有办法简化下面的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
- 添加
(或OSX上的-E)以删除一些-r
李>\
- 将
更改为/
,因此|
不需要转义/
::
和
很可能使其成为唯一的匹配
或者,如果您愿意:
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