GNU/Linux >> Znalost Linux >  >> Linux

Sed na Osx vložce na určitém řádku?

Chvíli jsem tedy používal ‚sed‘ na linuxu, ale měl jsem trochu potíže s jeho používáním na OSX, protože ‚POSIX sed‘ a ‚GNU sed‘ mají tolik malých rozdílů. Momentálně se potýkám s tím, jak vložit řádek textu za určité číslo řádku. (v tomto případě řádek 4)

Na linuxu bych udělal něco takového:

sed --in-place "4 a\  mode '0755'" file.txt

Takže na OSX jsem zkusil toto:

sed -i "" "4 a\ mode '0755'" file.txt

To mi však stále zobrazuje chybu „nadbytečné znaky po \ na konci příkazu“. Nějaké nápady, co je tady špatně? mám překlep? Nebo nerozumím dalšímu rozdílu mezi verzemi sed?

Přijatá odpověď:

Přesně řečeno, specifikace POSIX pro sed vyžaduje nový řádek za a\ :

[1addr]a\
text

Napište text na standardní výstup, jak bylo popsáno výše.

Díky tomu je psaní jednoduchých řádků trochu nepříjemné, což je pravděpodobně důvod pro následující rozšíření GNU do a , i a c příkazy:

Jako rozšíření GNU, pokud je mezi a a nový řádek je jiný než mezera-\ sekvence, pak text tohoto řádku, počínaje prvním znakem bez mezery za a , se bere jako první řádek textu blok. (To umožňuje zjednodušení skriptování jednořádkového přidání.) Toto rozšíření také funguje s i a c příkazy.

Tedy, aby byl přenosný s vaším sed syntaxi, budete muset za a\ vložit nový řádek Nějak. Nejjednodušší způsob je vložit nový řádek v uvozovkách:

$ sed -e 'a\
> text'

(kde $ a > jsou výzvy shellu). Pokud zjistíte, že to bolí, bash [1] má $' ' citace syntaxe pro vkládání escape stylu C, takže stačí použít

sed -e 'a\'$'\n''text'

[1] a mksh (r39b+) a některé non-bash bourne shelly (např. /bin/sh ve FreeBSD 9+)


Linux
  1. Manipulace s textem na příkazovém řádku pomocí sed

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

  3. Může Sed nahradit nové řádkové znaky?

  1. Vložit nové řádky s chybějícími hodnotami (ne)?

  2. Sed Odebrat znaky z nového řádku?

  3. Převeďte řetězec na hexadecimální na příkazovém řádku

  1. Naučte se používat textový editor Sed

  2. Jak vložit text na začátek souboru?

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