GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nahradit všechny řetězce v souboru, který začíná nějakou předponou?

Příklad:

1:20 2:25 3:0.432 2:-17 10:12

Chci nahradit všechny řetězce, které začínají s 2: na 2:0 .

Výstup:

1:20 2:0 3:0.432 2:0 10:12

Přijatá odpověď:

Pomocí sed :

sed -E 's/((^| )2:)[^ ]*/\10/g' in > out

Také, jak je inspirováno souravcovou odpovědí, pokud ne šance na 2: podřetězec za začátkem řetězce ne obsahující úvodní 2: podřetězec (např. není šance na 1:202:25 řetězec, který by následující zkrácený příkaz nahradil na 1:202:0 ), příkaz může být zkrácen na toto:

sed -E 's/2:[^ ]*/2:0/g' in > out

Rozdělení příkazu č. 1 / č. 2 :

  • -E :dělá sed interpretovat vzor jako vzor ERE (Extended Regular Expression);
  • > out :přesměruje stdout out;

sed rozbor příkazu č. 1 :

  • s :tvrdí, že provede substituci
  • / :spustí vzor
  • ( :spustí snímací skupinu
  • ( :spustí seskupování povolených řetězců
  • ^ :odpovídá začátku řádku
  • | :odděluje druhý povolený řetězec
  • :odpovídá postava
  • ) :zastaví seskupování povolených řetězců
  • 2 :odpovídá 2 postava
  • : :odpovídá : postava
  • ) :zastaví snímací skupinu
  • [^ ]* :odpovídá libovolnému počtu znaků, nikoli
  • / :zastaví vzor / spustí náhradní řetězec
  • \1 :zpětná reference nahrazena první skupinou zachycení
  • :přidá postava
  • / :zastaví nahrazující řetězec / spustí příznaky vzoru
  • g :požaduje provést substituci globálně, tj. nahradit každý výskyt vzoru v řádku

sed členění příkazu č. 2 :

  • s :tvrdí, že provede substituci
  • / :spustí vzor
  • 2 :odpovídá 2 postava
  • : :odpovídá : postava
  • [^ ]* :odpovídá libovolnému počtu znaků, nikoli
  • / :zastaví vzor / spustí náhradní řetězec
  • 2:0 :přidá 2:0 řetězec
  • / :zastaví nahrazující řetězec / spustí příznaky vzoru
  • g :požaduje provést substituci globálně, tj. nahradit každý výskyt vzoru v řádku

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

  2. Nahradit nový řádek nulou?

  3. Jak vytisknout soubor a ignorovat řádky, které začínají „?“?

  1. Jak skrýt soubory s konkrétní příponou?

  2. Jak nahradit text podobný sedu pythonem?

  3. příkaz tr - jak nahradit řetězec \n skutečným novým řádkem (\n)

  1. Jak nainstalovat soubor deb v Ubuntu (s příklady)

  2. Jak nahradit Grub Burgem?

  3. Jak spojit všechny typy souborů v rámci vína s jeho odpovídající nativní aplikací?