GNU/Linux >> Znalost Linux >  >> Linux

sed - jak udělat skupiny regulárních výrazů pomocí sed

To je to, co mají Birei a Thor na mysli:

sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"

Výstup:

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar

Ke skupinovým výrazům musíte escapovat závorky:

\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)

A použijte je s \1 , \2 , atd.

UPRAVIT :Všimněte si také těsně před SNAPSHOT že [.] nebude odpovídat. Uvnitř závorek . je doslovné. Mělo by to být [0-9.-]*


v případě těchto běžných řetězců vás awk může zachránit před seskupováním. :)

stačí zadat požadované indexové číslo dílu:

awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}' 

výstup:

kent$  echo "test-artifact-201251-balbal-0.1-SNAPSHOT.jar"|awk 'BEGIN{FS="-";OFS="-"}{print $1,$2,$5,$6}'
test-artifact-0.1-SNAPSHOT.jar

Linux
  1. Jak trasovat Python skripty pomocí trace.py

  2. Jak hledat soubory pomocí regulárního výrazu ve skriptu linuxového shellu

  3. Jak odstranit ne-ascii znaky pomocí sed

  1. Jak získat text stránky pomocí wget bez html?

  2. Proč sed ve výchozím nastavení nepoužívá rozšířený režim regulárních výrazů?

  3. Jak změnit soubor na místě pomocí awk? (jako u sed -i)

  1. Jak přejmenovat spoustu souborů pomocí Regex?

  2. Jak SSH na server pomocí jiného serveru?

  3. Jak přidat/vypsat/odebrat skupinu?