GNU/Linux >> Znalost Linux >  >> Linux

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

Chcete-li rozdělit řetězec pomocí oddělovače pomocí GNU sed, řeknete:

sed 's/delimiter/\n/g'     # GNU sed

Například pro rozdělení pomocí : jako oddělovač:

$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you

Nebo s ne-GNU sed:

$ sed $'s/:/\\\n/g' <<< "he:llo:you"
he
llo
you

V tomto konkrétním případě jste přehlédli g po střídání. Proto se to dělá jen jednou. Viz:

$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5

g znamená g lobální a znamená, že substituce musí být provedena globálně, to znamená pro jakýkoli výskyt. Podívejte se, že výchozí hodnota je 1 a pokud zadáte například 2, provede se to 2krát atd.

Dohromady byste ve vašem případě museli použít:

sed 's/:/\\n/g' ~/Desktop/myfile.txt

Všimněte si, že můžete přímo použít sed ... file syntaxe, místo zbytečného potrubí:cat file | sed .


Pomocí \n v sed je nepřenosný. Přenosný způsob, jak s sed dělat, co chcete je:

sed 's/:/\
/g' ~/Desktop/myfile.txt

ale ve skutečnosti to není práce pro sed každopádně je to úloha tr byl vytvořen za účelem:

tr ':' '
' < ~/Desktop/myfile.txt

Linux
  1. Používáte Notify-Send s Cronem?

  2. Doplnění s „sed“?

  3. Jak nahradit řetězec řetězcem obsahujícím lomítko se Sed?

  1. Použití odkazu na proměnnou bashového řetězce v Sed?

  2. Používáte Sed se speciálními znaky?

  3. Zabalit první znak řetězce pomocí Sed?

  1. Rozdělit jednotlivé znaky pomocí řetězce Null?

  2. Výměna řetězce pomocí slovníku?

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