Používání BSD sed;
Jak mohu provést následující substituci?:
Před:
hello hello hello
hello hello hello Po:
hello world hello
hello hello hello
Jinými slovy; jak mohu nahradit pouze ten N th výskyt vzoru?
(Nebo v tomto případě the 2 nd výskyt vzoru?)
Přijatá odpověď:
S jakýmkoli POSIX sed :
$ sed -e'/hello/{' -e:1 -e'$!N;s/hello/world/2;t2' -eb1 -e\} -e:2 -en\;b2 <file
hello world hello
hello hello hello
-
Po prvním zápase
/hello/, dostaneme se do smyčky. -
Vnitřní smyčka
:1, čteme každéNext line do prostoru vzorů, proveďtesnáhradní příkaz za2pouze výskyt.tzda je substituce úspěšná nebo ne. Pokud ano, narazíme na smyčku:2, jinak opakujte smyčku sb1. -
Vnitřní smyčka
:2, vytiskneme pouze zbývající řádky do konce souboru.
Všimněte si, že tento přístup uloží všechny věci mezi dva ahoj ve vzorovém prostoru. Problém to bude s velkými soubory, kdy jsou první a druhý daleko od sebe.
Freebsd – podpora Twain Api na Freebsd?
Freebsd – Pole uživatelského jména změněno zpět uživatelem Passwd?