Mam wiele plików, które zawierają informacje tekstowe ascii w pierwszych 5-10 wierszach, a następnie dobrze tabelaryczne informacje o macierzy. W skrypcie powłoki chcę usunąć kilka pierwszych wierszy tekstu, aby móc użyć informacji o czystej macierzy w innym programie. Jak mogę w tym celu użyć poleceń powłoki bash?
Jeśli to pomoże, używam RedHata i systemów Linux Ubuntu.
sed -i -e 1,3d yourfile
. To nic nie powtórzy, po prostu zmodyfikuje plik w miejscu. Jeśli nie musisz przesyłać wyniku do innego polecenia, jest to łatwiejsze.sed -i
konkretnie. Większość implementacji po prostu usuwa plik i zastępuje go nowym, co nie działa w przypadku linków, ponieważ ostatecznie pozostawiasz oryginał w innym miejscu.sed -i '1,3d' file.txt
Spowoduje to usunięcie pierwszych 3 wierszy z pliku.txt.
źródło
Jeśli linie tabelaryczne to te, które mają znak tabulacji:
(
␉
będący dosłownym znakiem tabulacji) lub równoważnieW skrypcie bash / ksh / zsh możesz pisać
$'\t'
dla karty, np .grep $'\t'
Lubsed -n $'/\t/p'
.Jeśli chcesz wyeliminować 10 linii na początku pliku:
(zwróć uwagę, że ma to na
+11
celu wyeliminowanie 10 linii, ponieważ+11
oznacza „zacznij od linii 11”, a numery linii od 1) lubW systemie Linux możesz skorzystać z opcji GNU sed,
-i
aby zmodyfikować pliki w miejscu:Lub możesz użyć pętli powłoki i plików tymczasowych:
Lub jeśli nie chcesz modyfikować plików w miejscu, ale zamiast tego nadaj im inną nazwę:
źródło
Możesz używać Vima w trybie Ex:
1
przejdź do pierwszej linii5
wybierz 5 liniid
usunąćx
Zapisz i zamknijźródło
echo "a \ nb" | sed „1d” # usuwa pierwszą linię
cat list.txt | sed '1d'> list.csv # czytaj list.txt i napisz list.csv bez pierwszej linii
Inne przydatne polecenia:
grep '^ |' # znajduje pierwszy znak (potok |)
sed 's / | // g' # usuwa potok
sed 's / // g' # usuwa spację
źródło
Procentowo
Używając
bash
, do czyszczenia pliku przy użyciu liczby procentowej zamiast bezwzględnej liczby wierszy:Uważaj, ponieważ to polecenie może być destrukcyjne, ponieważ usuwa zawartość w miejscu, bez tworzenia kopii.
Usuwa pierwsze 75% linii ze wspomnianego pliku.
źródło