Problem med mönster i sed

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Problem med mönster i sed

Inlägg av TicToc »

Jag sitter och gör ett sed-skript och nu visar det sig att en av texterna jag vill byta ut inte är konstant.
Någon som kan det här med mönster och uttryck som vill hjälpa till?

Exempel på originalsträng:
Name="ReportTitle1" Height="75,5906"
Height kan alltså variera, men oavsett vad det är vill jag sätta det till 90. Antalet decimaler kan variera, det jag vet är att det omsluts av ".

Edit:

Det närmaste jag kommer är med:

Kod: Markera allt

s/\"ReportTitle1\" Height=\"*\"/\"ReportTitle1\" Height=\"90\"/
Men resultatet innehåller den första höjden.
"ReportTitle1" Height="90"56,69295"
Användarvisningsbild
tann
Inlägg: 444
Blev medlem: 29 okt 2007, 16:23
OS: *BSD
Utgåva: 23.10 Mantic Minotaur
Ort: Kalmar
Kontakt:

Re: Problem med mönster i sed

Inlägg av tann »

Kod: Markera allt

sed -e 's/t=".*"$/t="90"/g'
ovanstående bör funka, såvida inget annat än just Height= slutar med t= :) eller iofs, matchar ju bara på slutet av raden så det ska funka.
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: Problem med mönster i sed

Inlägg av TicToc »

Tack för exemplet, jag labbade vidare med det men kom inte fram till något vettigt, det sabbar resten av raden...
Jag körde följande

Kod: Markera allt

s/\"ReportTitle1\" Height=\"[0-9][0-9],[0-9][0-9][0-9][0-9]\"/\"ReportTitle1\" Height=\"90\"/
s/\"ReportTitle1\" Height=\"[0-9][0-9],[0-9][0-9][0-9][0-9][0-9]\"/\"ReportTitle1\" Height=\"90\"/
s/\"ReportTitle1\" Height=\"[0-9][0-9],[0-9][0-9][0-9][0-9][0-9][0-9]\"/\"ReportTitle1\" Height=\"90\"/
och det funkade, nästan. Tills jag insåg att jag inte kan/bör sätta höjden till 90 i alla filer.
Problemet är inte löst, men nya förusättningar gav nytt problem med ny lösning. :)
Användarvisningsbild
tann
Inlägg: 444
Blev medlem: 29 okt 2007, 16:23
OS: *BSD
Utgåva: 23.10 Mantic Minotaur
Ort: Kalmar
Kontakt:

Re: Problem med mönster i sed

Inlägg av tann »

vad exakt består varje rad av? det fungerade utmärkt för mig med det jag skrev. svårt att komma lösningar om man inte vet exakta förutsättningar :)

kör du

Kod: Markera allt

sed -e 's/t=".*"$/t="90"/g' filnamn.txt
?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Problem med mönster i sed

Inlägg av David Andersson »

Du kan byta ut

[0-9][0-9],[0-9][0-9][0-9][0-9][0-9][0-9]

mot

[0-9]*,[0-9]*

så täcker du alla längder av talet.

Förklaring. I bash så används ett mönster-språk, för filnamn, som heter "glob". Där betyder * noll eller flera tecken. I sed används mönster-språket "regexp" (äv kallat "regex"). Där betyder * noll eller flera av föregående tecken (eller grupp av tecken).
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: Problem med mönster i sed

Inlägg av TicToc »

tann skrev:vad exakt består varje rad av? det fungerade utmärkt för mig med det jag skrev. svårt att komma lösningar om man inte vet exakta förutsättningar :)
Det har du helt rätt i!
För detta projekt sitter jag i windows och använder gnuwin32, och bara det ställer till det...
Jag använde en modifierad variant av ditt exempel, då det inte funkade öht för mig som det var. Följden var att det bytte ut allt möjligt (som slutade på t?)och dessutom klippte av rader.
En typisk fullständigt rad kan se ut så här:
<TfrxReportTitle Name="ReportTitle1" Height="56,69295" Left="0" Top="136,06308" Width="699,21305">
Sedan finns det en massa andra rader också...
Som jag skrev tidigare föll detta på lite andra bekymmer också, så det är inte aktuellt att sätta höjden på det vis jag ville från början, tack för din tid dock.
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: Problem med mönster i sed

Inlägg av TicToc »

David Andersson skrev:Du kan byta ut

[0-9][0-9],[0-9][0-9][0-9][0-9][0-9][0-9]

mot

[0-9]*,[0-9]*

så täcker du alla längder av talet.

Förklaring. I bash så används ett mönster-språk, för filnamn, som heter "glob". Där betyder * noll eller flera tecken. I sed används mönster-språket "regexp" (äv kallat "regex"). Där betyder * noll eller flera av föregående tecken (eller grupp av tecken).
Tack för ett bra tips, och för förtydligandet av * olika betydelser. Nu är det dags för mig att leta upp regexp för nybörjare.
Skriv svar

Återgå till "Terminalforum"