GNU/Linux >> Znalost Linux >  >> Linux

Sed Odstranění všeho do a včetně prvního období, pokud je na tomto řádku více než jedno období a udělat to pro celý soubor?

sed odstranění všeho do první tečky včetně, pokud je na daném řádku více než jedna tečka, a to pro celý soubor.

Před sed:

akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net

Po sed:

akamai.com
cloudflare.com
cdn.cloudflare.net

Přijatá odpověď:

$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net

sed skript nejprve porovná řádky, které obsahují alespoň dvě tečky, pomocí regulárního výrazu \..*\. (mohlo být také zapsáno [.].*[.] ). U řádků, které tomu odpovídají, se provede substituce, která odstraní vše až po první tečku včetně.

Pomocí awk , což je ve srovnání s výše uvedeným poněkud zdlouhavé:

$ awk -F '.' -vOFS='.' 'NF > 2 { n=split($0, a); $0=""; for (i=2;i<=n;++i) $(NF+1)=a[i] } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net

Zde, kdykoli existuje více než dvě pole oddělená tečkami, rozdělíme aktuální řádek na tečky a poté z něj znovu vytvoříme aktuální záznam, přičemž první pole přeskočíme. Koncová 1 na konci způsobí, že se vytiskne každý řádek (upravený nebo neupravený).

Kratší awk stejným způsobem jako sed řešení:

$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net

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

  2. Odebrat další řádky záhlaví ze souboru, kromě prvního řádku?

  3. Kódovat obsah souboru a echovat jej jako jeden řádek?

  1. Najít věk nejstaršího souboru na jednom řádku nebo vrátit nulu?

  2. Chci počkat na deskriptor souboru i na mutex, jaký je doporučený způsob, jak to udělat?

  3. Jak se dotknout souboru a mkdir v případě potřeby na jednom řádku

  1. Nahradit řádek jiným obsahem pomocí Sed And Parallel pro velký soubor?

  2. xargs nahrazení více než jednoho argumentu

  3. Odebrání a přidání oprávnění pomocí číselného zápisu na stejném řádku