GNU/Linux >> Znalost Linux >  >> Linux

najít odpovídající text a nahradit další řádek

Jeden způsob:Ukázkový soubor

$ cat file
Cygwin
Unix
Linux
Solaris
AIX

Pomocí sed nahraďte další řádek za vzorem 'Unix' výrazem 'hi':

$ sed '/Unix/{n;s/.*/hi/}' file
Cygwin
Unix
hi
Solaris
AIX

Pro vaši konkrétní otázku:

$ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file
<key>ConnectionString</key>
<string>NEW STRING</string>

Toto by vám mohlo fungovat (GNU sed):

sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file

!b neguje předchozí adresu (regexp) a přeruší jakékoli zpracování, čímž ukončí příkazy sed, n vytiskne aktuální řádek a poté přečte další do prostoru vzoru, c změní aktuální řádek na řetězec následující za příkazem.


Funguje to. Dále je zajímavé zmínit, že pokud píšete,

sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file

Všimněte si dvou n, nahradí se po dvou řádcích a tak dále.


Linux
  1. Použití sed k nalezení a nahrazení textových souborů v Linuxu

  2. Použití příkazů Sed,ex a perl k vyhledání a nahrazení textu v Linuxu

  3. Rekurzivní vyhledávání a nahrazování v textových souborech na Macu a Linuxu

  1. Jak nahradit řetězec v souboru (souborech)?

  2. Najít a nahradit ve skriptování shellu

  3. Najděte a nahraďte text v souboru mezi rozsahy řádků pomocí sed

  1. Editor Vi a Vim:12 účinných příkladů hledání a nahrazování

  2. Jak nahradit text podobný sedu pythonem?

  3. Použití grep a sed k nalezení a nahrazení řetězce