Byta ut mellanslag mot tab

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2006-02-20 10:21

Jag har filer där jag vill byta ut ett eller fler mellanslag mellan vanlig text mot ett tab-tecken. Filen kan se ut så här, där punkten i detta exempel får motsvara mellanslagt:

a.b....c.......d.e....
f..g.....h.i.j
k....l.m.n............o

efteråt ska filen se ut så här, där minustecknet motsvarar tab:

a-b-c-d-e-
f-g-h-i-j
k-l-m-n-o

sed 's/x/x/g'... något borde väl fixa detta?

  • Medlem
  • International user
  • 2006-02-20 14:51

hmm jag vet inte om nåt annat fixar det än att ta en find and replace manuellt. Typ f(...) r(-), f(..) r(-), f(.) r(-) osv. Eller så Apple scriptar du det. Om du gör det manuellt börja med största antalet mellanslag du finner i filen och gå neråt.

perl -pe 's/\s+/\t/g'

byter ut 1 eller fler förekomster av whitespace mot ett tabbtecken.

  • Medlem
  • Kiruna
  • 2006-02-20 16:15
sed 's/  */ /g' infil > utfil

Notera: två mellanslag innan stjärnan; för att kunna skriva ett tabtecken som utbyte, tryck först Ctrl-V.

Alternativt

sed -E 's/[[:space:]]+/ /g' infil > utfil

för att ta vilka whitespace-tecken som helst.

Sed är förmodligen ett bättre val, men för att ge ytterligare ett alternativ

tr -s " " "   " 
  • Medlem
  • International user
  • 2006-02-21 08:34

Det går även att använda vanliga 'echo', som default tar bort multipla instanser av "white spaces". (punkten representerar ett mellanslag)

echo a......b.c.d..e........f -> a.b.c.d.e.f

och så vidare...

  • Medlem
  • International user
  • 2006-02-21 11:14

Det finns många sidor med regex-tutisar och det finns säkert fler tips om detta på 99Mac: Så här kommer en till, en bra sådan: http://gnosis.cx/publish/programming/regular_expressions.html

1
Bevaka tråden