有没有办法简化以下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'
答案 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|'
-Ee
-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