Jestem nowy w programowaniu !!
Czy ktoś może pomóc usunąć :
pierwszą pozycję znacznika czasu::29.06.2019 23:03:17
Obecnie próbuję to zrobić za pomocą poleceń awk / cut, jak pokazano poniżej:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"
29.06.2019 23
A wynik nie jest tym, czego chciałem! Chcę to wydrukować jako 29.06.2019 23:03:17
.
źródło
Oto
sed
rozwiązanie:Polecenie
sed 's/^://'
zastępujes
znak dwukropka:
na początku^
każdego wiersza pustym ciągiem//
.Oto trudne
awk
rozwiązanie, w którym zmieniamy separator pól na^:
opisany powyżej i wyprowadzamy drugie pole (każdej linii):Zadanie można wykonać również za pomocą
grep
( objaśnienia ), prawdopodobnie jest to najszybsze rozwiązanie dla dużej ilości danych:Lub przetworz plik bezpośrednio za pomocą następującego polecenia, w którym ograniczenie
^
zostanie usunięte:Powyższe można osiągnąć również poprzez
sed
przechwytywanie grup()->\1
:Gdzie wyrażenie
^.*<something>.*$
pasuje do całej linii, która zawiera<something>
. Polecenies/old/new/
zastąpi ten wiersz treścią pierwszej grupy przechwytywania (wyrażenie w nawiasach może być bardziej konkretne). Opcja-r
włącza rozszerzone wyrażenia regularne. Opcja-n
pominie normalne wyjście,sed
a na końcu poleceniep
wydrukuje dopasowania.źródło
awk
może istnieć wieloznakowa FS ze znakami o specjalnym znaczeniu! Nauczyłem się dzisiaj.Ponieważ już to przetwarzasz
awk
, możesz równie dobrze zrobić całą rzecz bezpośrednio:W
sub
ogóle Format polecenia jestsub(/REGEX/, REPLACEMENT, TARGET)
i będzie wymienić wszystkie mecze do wyrażenia regularnegoREGEX
z ciągREPLACEMENT
w ciągu wejściowegoTARGET
. Tutaj zastępujemy pierwszy:
(^
czyli „początek”) z trzeciego pola ($3
) niczym.Oczywiście, jeśli robisz to w awk, możesz równie dobrze zrobić wszystko w awk i zrobić wszystko za jednym razem:
Lub w twoim przypadku:
źródło
Kolejne rozwiązanie bash:
xargs
konwertujestdin
(standardowe wejście) na parametry pozycyjne dlabash
polecenia.echo
siętail -n1 /path/to/reportfile.txt
.źródło