Kaip pašalinti linijas iš failo vidurio naudojant "Linux" terminalą

Kaip pašalinti linijas iš failo vidurio naudojant "Linux" terminalą
Kaip pašalinti linijas iš failo vidurio naudojant "Linux" terminalą

Video: Kaip pašalinti linijas iš failo vidurio naudojant "Linux" terminalą

Video: Kaip pašalinti linijas iš failo vidurio naudojant
Video: SteamOS 3 INSTALL on ANY PC! Best Gaming Distro?? - YouTube 2024, Lapkritis
Anonim
Kai tvarkote savo serverius, vienas iš dalykų, kuriuos jums reikia atlikti pusiau reguliariai, yra failo viduryje surinkti dalykai. Galbūt tai yra žurnalo failas, arba jums reikia papildomos vienos lentelės iš savo "MySQL" atsarginės kopijos failo vidurio, kaip ir aš.
Kai tvarkote savo serverius, vienas iš dalykų, kuriuos jums reikia atlikti pusiau reguliariai, yra failo viduryje surinkti dalykai. Galbūt tai yra žurnalo failas, arba jums reikia papildomos vienos lentelės iš savo "MySQL" atsarginės kopijos failo vidurio, kaip ir aš.

Norėdami sužinoti eilučių numerius, paprasta grep -n komanda atliko darbą (-n argumentas išveda eilučių numerius). Tai leido suprasti, ko man reikia išgauti.

grep -n wp_posts howtogeekdb010114.bak | more

Rezultatai kažką panašaus į tai, kas rodo eilučių numerius kairėje išvesties pusėje. Vamzdynai viską į "daugiau" užtikrina, kad pamatytumėte pirmąją eilutę be jos slinkties. Dabar turėsite eilutės numerį, nuo kurio pradėsite, ir galbūt tas, kuris pasibaigs.

4160:-- Table structure for table `wp_posts` 4163:DROP TABLE IF EXISTS `wp_posts`; 4166:CREATE TABLE `wp_posts` ( 4203:-- Dumping data for table `wp_posts` 4206:LOCK TABLES `wp_posts` WRITE; 4207:/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */; 4208:INSERT INTO `wp_posts` VALUES (1,2,'2006-09-11 05:07:23','2006-09-11

Galite, žinoma, tiesiog išvesti iš grep į kitą failą, tokį kaip:

grep keyword filename.txt > outputfile

Mano atveju tai nenorėjo dirbti, nes dėl kokios nors priežasties nepavyko importuoti gauto atsarginės kopijos. Taigi, radau kitokį būdą išgauti linijas, naudojant sed, ir šis metodas dirbo.

sed -n '4160,4209p' howtogeekdb0101140201.bak > outputfile

Iš esmės sintaksė yra tokia, įsitikinusi, kad naudojate -n argumentą ir po pogrupio antrojo eilutės numerio įrašykite "p".

sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filename > outputfilename

Keletas kitų būdų, kaip išskleisti konkrečias eilutes failo viduryje? Galite naudoti komandą "head" su argumentu "+", kad tik perskaitytumėte pirmąsias x eilutes failo, o tada naudokite uodegą, kad išskirtumėte šias eilutes. Ne geriausias variantas, daug pridėtinių. Paprastesnis variantas? Galite naudoti komandą split, norėdami paversti failą į kelis failus tiesiai ant norimo eilutės numerio, o tada ištraukite linijas naudodami galvos ar uodegą.

Arba galite tiesiog naudoti sed.

Rekomenduojamas: