GNU/Linux >> Znalost Linux >  >> Linux

sed - vložit řádek za X řádků po shodě

sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • vložte řádek za } (samotný v řádku s případnou mezerou před) ze sekce začínající function_1(
  • Předpokládám, že neexistuje žádný } sám ve vašem interním kódu jako ve vašem vzorku

buďte opatrní při výběru na základě názvu funkce, protože by mohl být použit (a normálně je) jako volání samotné funkce v jiné sekci kódu, takže možná /^void function_1()$/ je lepší


Nepočítat, odpovídat:

sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input

Tím se podívá na blok mezi deklarací a uzavírací složenou závorkou a poté za uzavírací složenou závorku přidá TEXT_TO_INSERT.


Použijte awk:

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1 je zkratka pro {print} , takže se vytisknou všechny řádky v souboru
  • Když se vzor shoduje, nastavte c do 4
  • když c dosáhne 1 (takže c je true a !--c je true), vložte řádek

Stačí použít !--c ale přidání kontroly na c být pravdivý také znamená, že c neklesá nad 0.


Zkuste to s GNU sed:

sed "/function_1/{N;N;N;a new_text
}" filename

Linux
  1. Nahrazení vzoru po N-té shodě se najde na každém řádku?

  2. Nahradit rozsah řádků rozsahem řádků (sed nebo jiné)?

  3. Jak spočítat počet řádků v souboru po zápase Grep?

  1. grep odpovídá pouze řádkům v určeném rozsahu

  2. Jak použít sed k odstranění pouze dvojitých prázdných řádků?

  3. Vložit více řádků do souboru po zadaném vzoru pomocí shell skriptu

  1. Jak vložit text před první řádek souboru?

  2. Jak vložím text do 1. řádku souboru pomocí sed?

  3. Jak získat n-tý řádek po grepovaném řádku?