有什么方法可以简化以下的sed?

时间:2016-01-31 18:39:36

标签: sed

有没有办法简化以下foreach(不使用另一个二进制文件,只有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'

2 个答案:

答案 0 :(得分:2)

echo "server16 :: FetchChannels.20160131.170019.875685.16232510.22" | \
sed -re '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|'
  • 在Mac OS X上使用-Ee
  • 在OSX上添加-r(或-E)以删除一些\
  • /更改为|,以便/不需要转义

答案 1 :(得分:1)

这可能适合你(GNU sed):

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

匹配::.' s很可能会使其成为唯一匹配。

或者如果您愿意:

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