I want to convert the timestamps in a .zsh_history file to their readable equivalents.

Is there some search and replace I can do in emacs that will replace the time with something like (format-time-string unixtime)?

: 1568128379:0;cp -a ~/.zshrc.pre-oh-my-zsh ~/.zshrc
: 1568128381:0;exit
    • vfclists@alien.topOPB
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      And how is this a meaningful answer to the question?

      Is there some rule that questions asked here shouldn’t be asked on stackexchange too?

  • jsled@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    C-h a replace-regexp , select the function, and look at its help string.

    The solution will end up looking something like:

    M-x replace-regexp  : \([0-9]+\):\(.*\)  \,(+ 1 \#1):\2
    

    But with (format-time-string) instead of my (+1 1 \#1); I don’t know time formatting functions in emacs elisp off the top of my head, sorry.

    (Or use query-replace-regexp if you want interactivity.)

  • vfclists@alien.topOPB
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Here is the solution for my .zsh_history example:

    I first created a small function for the unix time string. More of the functionality in the replacement string can be included if preferred.

        (defun rgx-get-time-string (unixtimestr)
         (format-time-string "%Y-%m-%d %H:%M" (string-to-number unixtimestr))
          )
    

    The search string: \(: \)\([0-9]\{10\}\)\(:0;\)

    The replacement string: \,(concat (format "%6d " (line-number-at-pos)) (rgx-get-time-string (match-string 2)) " "))

    (match-string 2) is an alternative for the back reference for the second string matched\2