GNU/Linux >> Znalost Linux >  >> Linux

Problém s použitím xargs --max-args --nahraďte výchozím oddělovačem

Podle dokumentace POSIX xargs by měl spustit daný nástroj s argumenty oddělenými buď mezerami nebo novými řádky, a to je to, co se děje ve dvou vašich prvních příkladech.

Když však --replace (nebo -I ), argumenty oddělují pouze nové řádky. Náprava je dát xargs argumenty na samostatných řádcích:

$ printf '%s\n' a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c y

Použití možností POSIX:

printf '%s\n' a b c | xargs -n 1 -I "{}" echo x "{}" y

Zde dávám xargs ne jeden řádek, ale tři. Zabere jeden řádek (maximálně) a spustí obslužný program s tímto argumentem.

Všimněte si také, že -n 1 (nebo --max-args=1 ) ve výše uvedeném není potřeba, protože jde o počet nahrazení provedených -I který určuje počet použitých argumentů:

$ printf '%s\n' a b c | xargs -I "{}" echo x "{}" y
x a y
x b y
x c y

Ve skutečnosti jde o sekci Rationale specifikace POSIX na xargs říká (můj důraz)

-I , -L a -n možnosti se vzájemně vylučují . Některé implementace používají poslední zadanou, pokud je na příkazovém řádku uvedeno více než jedna; jiné implementace zacházejí s kombinacemi možností různými způsoby.

Během testování jsem si všiml, že verze OpenBSD xargs pokud -n provede následující a -I se používají společně:

$ echo  a b c | xargs -n 1  -I "{}" echo x "{}" y
x a y
x b y
x c y

To se liší od xargs GNU coreutils dělá (což vytváří x a b c y ). To je způsobeno implementací, která akceptuje mezery jako oddělovač argumentů s -n , i když -I se používá. Takže nepoužívejte -I a -n společně (stejně to není potřeba).


Linux
  1. Používáte zalamování slov s Mc?

  2. Použití barev s printf

  3. Použití sed k rozdělení řetězce s oddělovačem

  1. Používáte SDL2 na linuxu s g++?

  2. Odstranění souborů pomocí rm pomocí find a xargs

  3. Nastavit výchozí uloženou práci s GRUB2...?

  1. Jak zaparkovat domény pomocí ISPConfig

  2. Použití slovních modifikátorů s historií Bash v Linuxu

  3. Jak podložit soubor pomocí FF pomocí dd?