Kiedy zarządzasz swoimi serwerami, jedną z rzeczy, które musisz regularnie wykonywać, jest wydobywanie danych z pliku. Być może jest to plik dziennika, lub musisz dodać pojedynczą tabelę ze środka pliku kopii zapasowej MySQL, tak jak ja.
Aby obliczyć numery linii, wykonano proste polecenie grep -n (argument -n podaje numery linii). Ułatwiło to ustalenie, co muszę wydobyć.
grep -n wp_posts howtogeekdb010114.bak | więcej
Wyniki w coś podobnego, pokazujące numery linii po lewej stronie wyjścia. Doprowadzenie wszystkiego do "więcej" sprawia, że pierwsza linia jest widoczna bez przewijania. Teraz masz numer linii na początek i prawdopodobnie na końcu.
4160: - Struktura tabeli dla tabeli "wp_posts" 4163: DROP TABLE IF EXISTS "wp_posts"; 4166: CREATE TABLE 'wp_posts' (4203: - Dumping danych dla tabeli 'wp_posts' 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABLE 'wp_posts' WYŁĄCZ KLAWISY * /; 4208: INSERT INTO 'wp_posts "WARTOŚCI (1,2," 2006-09-11 05:07:23 "," 2006-09-11
Można oczywiście po prostu przesłać dane wyjściowe z grep do innego pliku, na przykład:
grep słowo kluczowe nazwa_pliku.txt> plik_wyjściowy
W moim przypadku to nie chciało działać, ponieważ z jakiegoś powodu nie mogłem zaimportować wynikowej kopii zapasowej. Tak więc znalazłem inny sposób wyodrębniania linii za pomocą sed i ta metoda zadziałała.
sed -n '4160,4209p' howtogeekdb0101140201.bak> plik wynikowy
Zasadniczo składnia jest taka, upewnij się, że używasz argumentu -n i dołączasz "p" po drugim numerze linii.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filename> outputfilename
Niektóre inne sposoby na wyciągnięcie określonych linii w środku pliku? Możesz użyć polecenia "head" z argumentem liczby +, aby odczytać pierwsze x wierszy pliku, a następnie użyć komendy tail, aby wyodrębnić te linie. Nie najlepsza opcja, dużo kosztów ogólnych. Prostsza opcja? Można użyć polecenia split, aby przekształcić plik w wiele plików bezpośrednio na żądany numer linii, a następnie wyodrębnić wiersze za pomocą głowy lub ogona.
Lub możesz po prostu użyć sed.