Co to jest polecenie uniksowe do usuwania pierwszych n znaków linii?

Na przykład, mogę chcieć:

tail -f logfile | grep org.springframework | <command to remove first N characters>

Myślałem, że tr może być w stanie to zrobić, ale nie jestem pewien.

Author: Sam, 2009-06-09

6 answers

Użyj cut. Np. aby usunąć pierwsze 4 znaki z każdej linii (np. początek na 5. znaku):

tail -f logfile | grep org.springframework | cut -c 5-
 241
Author: iammichael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 19:06:44
sed 's/^.\{5\}//' logfile 

I zamieniasz 5 przez liczbę, którą want...it powinno wystarczyć...

Edytuj if for each line sed 's/^.\{5\}//g' logfile

 33
Author: LB40,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-09 19:23:06

Możesz użyć cut:

cut -c N- file.txt > new_file.txt

-c: znaki

file.txt: plik wejściowy

new_file.txt: plik wyjściowy

N-: znaki od N do końca do wycięcia i wyjścia do nowego pliku.

Może mieć również inne args, takie jak: 'N', 'N-M','- M ' oznaczające odpowiednio n-ty znak, n-ty do M-ty znak, pierwszy do M-ty znak.

To wykona operację dla każdej linii pliku wejściowego.

 16
Author: Ankur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-28 21:32:31
tail -f logfile | grep org.springframework | cut -c 900-

Usunie pierwszych 900 znaków

cut używa 900 - aby pokazać 900-ty znak na końcu linii

Jednak jak to wszystko przepuszczam przez grep to nic nie dostaję

 3
Author: les2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-08 17:11:36

Myślę, że awk byłoby do tego najlepszym narzędziem, ponieważ może zarówno filtrować, jak i wykonywać niezbędne funkcje manipulacji łańcuchami na filtrowanych liniach:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'

Lub

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'
 1
Author: John B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-11 17:18:57

Oto prosta funkcja, przetestowana w bash. 1. param funkcji to string, 2. param to liczba znaków do usunięcia

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

Użycie: Tutaj wpisz opis obrazka

 1
Author: To Kra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-17 14:17:03