[BASH] Skrypt, sort, data, sed

0

Witam

W sumie to mam konkretnie dwa główne pytania i pomniejsze, pierwsze to:
Jak za pomocą seda w takich liniach: (string, nie pliki)

15 Nov 2016 18:25:31
1 Jan 2017 13:29:28
29 Nov 2016 17:10:11

Najproście wyodrębnić np. tylko godzinę, tylko rok, tylko miesiąc? Ilość znaków się zmienia ze względu na dni, czyli użycie 'kropek' jako 'losowego' znaku odpada.
Jak za pomocą sed zapisać coś w stylu: 'Pokaż wszystko od znalezionej 3 spacji do końca wiersza lub pokaż wszystko od znalezionej 3 spacji do 4 spacji'.

To było pierwsze główne pytanie. Teraz drugie.
Jak najprościej można posortować poniższą listę, żeby na koniec zostały zmienione nazwy plików np. na msg.1 jako najstarszy, a msg.101 jako najnowszy.

/home/otzi/Mail/msg.HBAQ 15 Nov 2016 18:25:31
/home/otzi/Mail/msg.UEAQ 31 Jan 2017 13:29:28
/home/otzi/Mail/msg.rBAQ 2 Nov 2016 17:10:11
/home/otzi/Mail/msg.fDAQ 29 Dec 2016 13:28:34
/home/otzi/Mail/msg.6DAQ 1 Jan 2017 13:15:32
/home/otzi/Mail/msg.pAAQ 06 Nov 2016 12:04:49
/home/otzi/Mail/msg.YDAQ 23 Dec 2016 13:13:54
/home/otzi/Mail/msg.gDAQ 29 Dec 2016 15:32:14
/home/otzi/Mail/msg.FGAQ 2 Sep 2017 13:54:49
/home/otzi/Mail/msg.IBAQ 16 Nov 2016 17:24:03
/home/otzi/Mail/msg.zDAQ 06 Jan 2017 19:30:34
/home/otzi/Mail/msg.JFAQ 24 Mar 2017 17:22:52
/home/otzi/Mail/msg.XFAQ 9 Apr 2017 15:59:41
/home/otzi/Mail/msg.FFAQ 21 Mar 2017 04:40:02
/home/otzi/Mail/msg.DGAQ 2 Sep 2017 13:32:09

Dzięki z góry, dopiero zaczynam swoją przygodę ze skryptami.
Pozdrawiam

0
  1. Zamias sed najlepiej użyć grep:

    • godzina: grep -oE '\d\d:\d\d:\d\d'
    • rok: grep -oE '\d\d\d\d' (zakładając, że wszystkie lata mają 4 cyfry
    • miesiąc: \<[A-Z][a-z][a-z]\> (zakładając, że wszystkie miesiące są 3 literowymi skrótami zaczynającymi się od dużej litery)

    Alternatywnie można użyć date (może być wolniejsze, bo musi przeparsować dane) tak: while read line; do LC_ALL=en date -jf '%d %b %Y %H:%M:%S' "$line" +"<format daty jaki chcesz>"; done < "$file"

  2. Najprościej będzie tutaj użyć Rubiego lub innego języka skryptowego.

0

Jest taka fajna komenda:

cut -f4 -d" "

po -f definiujesz numery kolumn ktore chcesz (f4, zwroci 4 element) -f3- to wlasnie wszystko od 3 spacji.
-d to delimiter

Co do sortowania po czasie, nie latwiej zrobic ls -latr ? (latwy mnemonik, z latryna mozna skojarzyc).

BTW. zagraj sobie w Bandita, przejdziesz wszystkie poziomy to bedziesz ogarnial takie rzeczy bez problemu:) http://overthewire.org/wargames/bandit/

0

Jak wyguglujesz "bash change date format in file"
to znajdziesz kilka przykładów korzystających z awk, date i czasami sed.
Sam sed wygląda raczej smutno w tych rozwiązaniach:
https://unix.stackexchange.com/a/311225

1 użytkowników online, w tym zalogowanych: 0, gości: 1