Allt från Computex 2023
Permalänk
Inaktiv

Sed och shell-variabler.

Hola!
Jag sitter och knackar ett skript som delvis använder sig av sed. Det jag undrar är om man kan göra om (detta är en mycket förenklad version av det jag skrivit):

echo $something|sed 's/change this/to this/'>>$tmp

till en rad utan echo $something|, och därmed spara en process genom att sed ser $something direkt? $something är en sträng som skall behandlas, inte en fil:

sed 's/change this/to this/' $something>>$tmp

tolkas som att $something är en fil, inte en sträng.

Har letat med ljus och lykta på google och hittat en massa bra genomgångar av sed, men inget svar på min fråga.

Permalänk
Medlem

Nja, sed processar strömmar, inte variabler. Det närmaste jag kan tänka mig, om man verkligen vill bli av med echo, är något liknande:

$ FOO=foo sed 's/foo/bar/' <<EOF > $FOO > EOF bar

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0rris
Nja, sed processar strömmar, inte variabler. Det närmaste jag kan tänka mig, om man verkligen vill bli av med echo, är något liknande:

$ FOO=foo sed 's/foo/bar/' <<EOF > $FOO > EOF bar

Fast då får man förmodligen en cat-process istället.

Visa signatur

"`F' is group reply. This is because `G' is for sort and `g' is for get new mail. And `G' is for sort because `sort' used be called `group', and anyway `S' is for save mailbox and `s' is for file message in folder, because `f' is group reply and `F' is group reply including original text."

Permalänk
Inaktiv
Citat:

Ursprungligen inskrivet av m0rris
Nja, sed processar strömmar, inte variabler. Det närmaste jag kan tänka mig, om man verkligen vill bli av med echo, är något liknande:

$ FOO=foo sed 's/foo/bar/' <<EOF > $FOO > EOF bar

Ah, I see...
Men hur skulle det översättas om det skall vara en del av ett skript? Jag sitter och optimerar mitt skript just nu som tar runt 23s på min maskin(XP 3200+). Det kommer troligtvis köras på långsammare maskiner och jag vill ha antalet processer till ett minimum.

Har ni några saker man skall tänka på för att snabba upp exekveringen av ett sh-skript? T ex använda sed isf awk?

Permalänk
Medlem

sed 's/change this/to this/' >> $tmp <<< $something

eller

echo ${something/change this/to this} >> $tmp

Permalänk
Inaktiv
Citat:

Ursprungligen inskrivet av lefant

sed 's/change this/to this/' >> $tmp <<< $something

eller

echo ${something/change this/to this} >> $tmp

Coolt, går det alltså att göra substitutioner(med reguljära uttryck) via echo? Jag använder bin/sh som skal, kan vara bra att veta...

EDIT: Ingen av dessa verkar bourne shell tycka om...

echo $line|sed 's/defpseudo/pseudo-device/'>>$template

är ett exempel vad jag gör nu.

Jag ändrar $line från:

defpseudo foo

till:

pseudo-device foo

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av mickeus
Coolt, går det alltså att göra substitutioner(med reguljära uttryck) via echo? Jag använder bin/sh som skal, kan vara bra att veta...

Är nog en bash grej kan jag tänka mig.

Permalänk
Inaktiv
Citat:

Ursprungligen inskrivet av lefant
Är nog en bash grej kan jag tänka mig.

Verkar vara det för ingen av de två fungerar. Men kan jag tänka på något annat när jag skriver, som jag nämnde ovan att använda sed isf awk (om nu sed är snabbare än awk?) etc. Några tips från erfarna shell-gurus?

Permalänk
Medlem

Svårt att säga på rak arm vad som tar tid för dig. Du får nog börja mäta saker i ditt script för att avgöra vilka delar som är tidskritiska. Kommandot time(1) kan hjälpa dig där. Har svårt att tänka mig att echo är boven i dramat dock, men man vet aldrig.

Permalänk
Inaktiv
Citat:

Ursprungligen inskrivet av m0rris
Svårt att säga på rak arm vad som tar tid för dig. Du får nog börja mäta saker i ditt script för att avgöra vilka delar som är tidskritiska. Kommandot time(1) kan hjälpa dig där. Har svårt att tänka mig att echo är boven i dramat dock, men man vet aldrig.

Jag går igenom runt 90 filer, får nästan 4000 rader(som matchar ett mönster) i en temporär fil som sedan behandlas igen och resulterar i en fil med ca 1000 rader. Jag har skurit ned och förenklat efter att jag hade en lösning som fungerade. Eftersom jag har noll erfarenheter av att skriva shell-skripts så jag gör säkert en massa misstag som straffar sig med att det tar längre tid. Jag får kolla in time...

Tack för alla svar!

Permalänk
Medlem

Är det något topphemligt, eller kan du posta ditt skript här?
I så fall, använd [code][/ code]

Permalänk
Inaktiv
Citat:

Ursprungligen inskrivet av Marwin
Är det något topphemligt, eller kan du posta ditt skript här?
I så fall, använd [code][/ code]

Jag håller på med ett arbete som går ut på att jag skall ge erbjuda funktionalitet för att underlätta (allt är relativt) själva byggandet av kärnan och userland till NetBSD. Skall vara klart i slutet av januari/början av februari. Jag kommer då att släppa det under BSD-licens. Innan dess vill jag nog inte släppa något, inte för att det är hemligt men jag vill endast släppa något som liknar en färdig applikation samt att jag fått godkänt på arbetet.