|
| sed Fra : Carsten |
Dato : 07-06-05 17:20 |
|
Hej NG
er det muligt med sed at finde en tekst og udskifte det er måtte stå bag
efter
eks. finde 'port' og indsætte '443' bag efter, i strædet for hvad der i
forvejen måtte stå, så resultatet bliver port 443
/Carsten
| |
Bjarne Bue (07-06-2005)
| Kommentar Fra : Bjarne Bue |
Dato : 07-06-05 17:57 |
|
Carsten wrote:
> Hej NG
> er det muligt med sed at finde en tekst og udskifte det er måtte stå bag
> efter
> eks. finde 'port' og indsætte '443' bag efter, i strædet for hvad der i
> forvejen måtte stå, så resultatet bliver port 443
Ja da: sed "s/port\ /port\ 443/"
Matcher på "port " altså med et efterfølgende mellemrum. Fjern "\ " hvis
den ikke skal det.
- Bjarne
| |
Carsten (07-06-2005)
| Kommentar Fra : Carsten |
Dato : 07-06-05 19:35 |
|
Bjarne Bue wrote:
> Carsten wrote:
>> Hej NG
>> er det muligt med sed at finde en tekst og udskifte det er måtte stå bag
>> efter
>> eks. finde 'port' og indsætte '443' bag efter, i strædet for hvad der i
>> forvejen måtte stå, så resultatet bliver port 443
>
> Ja da: sed "s/port\ /port\ 443/"
>
> Matcher på "port " altså med et efterfølgende mellemrum. Fjern "\ " hvis
> den ikke skal det.
>
> - Bjarne
desvære, den virker ikke helt, den værdi der i forvejen står efter port
bliver stående, resultat = port 43322
22 skulle gerne slettes uden at det er nødvendig specificere at det er 22
der skal slettes
/Carsten
| |
Klaus Alexander Seis~ (07-06-2005)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 07-06-05 19:48 |
|
Carsten skrev:
>> Ja da: sed "s/port\ /port\ 443/"
>
> desvære, den virker ikke helt, [...]
#v+
$ echo "Dette er port 22, ja det er." | sed 's/port [0-9]*/port 443/g'
Dette er port 443, ja det er.
$
#v-
Mvh,
--
Klaus Alexander Seistrup
Magnetic Ink, Copenhagen, Denmark
http://magnetic-ink.dk/
| |
Martin Jørgensen (08-06-2005)
| Kommentar Fra : Martin Jørgensen |
Dato : 08-06-05 16:24 |
|
Klaus Alexander Seistrup wrote:
-snip-
> #v+
>
> $ echo "Dette er port 22, ja det er." | sed 's/port [0-9]*/port 443/g'
> Dette er port 443, ja det er.
> $
>
> #v-
Genialt... Jeg læser lige lidt med og lærer lidt. Jeg er med på det
meste, men hvad betyder det sidste g?
Jeg går udfra at *´en blot hentyder til "indtil tallene stopper". Hvad
hvis man ville lave en replace af "port 22" efterfulgt af tilfældige
bogstaver/symboler, mellemrum/tabulator og tal indtil der kommer EOL?
Eks:
En fil med mange linjer:
1 Dette er port 22, ja det er.
2 Dette er port 22, 389 583 9393 asdf, ja det er
3 Dette er port 22! +#)#/-!&, gu er det så.
Skal give:
1. Dette er port 443, ja det er.
2. Dette er port 443, ja det er.
3. Dette er port 443, ja det er.
?
Med venlig hilsen / Best regards
Martin Jørgensen
--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk
| |
Thorbjoern Ravn Ande~ (08-06-2005)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 08-06-05 16:30 |
|
Martin Jørgensen <unoder.spam@spam.jay.net> writes:
> Genialt... Jeg læser lige lidt med og lærer lidt. Jeg er med på det
> meste, men hvad betyder det sidste g?
>
> Jeg går udfra at *´en blot hentyder til "indtil tallene stopper". Hvad
> hvis man ville lave en replace af "port 22" efterfulgt af tilfældige
> bogstaver/symboler, mellemrum/tabulator og tal indtil der kommer EOL?
man re_format
--
Thorbjørn Ravn Andersen
http://www.unixsnedkeren.dk - Unix, Java, Web, Netværk, Århus
| |
Peter Jensen (08-06-2005)
| Kommentar Fra : Peter Jensen |
Dato : 08-06-05 17:21 |
|
Martin Jørgensen wrote:
>> #v+
>>
>> $ echo "Dette er port 22, ja det er." | sed 's/port [0-9]*/port 443/g'
>> Dette er port 443, ja det er.
>> $
>>
>> #v-
>
> Genialt... Jeg læser lige lidt med og lærer lidt. Jeg er med på det
> meste, men hvad betyder det sidste g?
Gentag søg/erstat for alle fundne elementer i linjen.
> Jeg går udfra at *´en blot hentyder til "indtil tallene stopper".
0 eller flere af sidste atom (i dette tilfælde rækken af tegn fra 0 til
og med 9). Tilsvarende bruges '+' til 1 eller flere, mens '?' betyder 0
eller 1. Regular expressions bliver også brugt til 'grep' og mange
andre kommandoer, så det er rart at lære dem.
> Hvad hvis man ville lave en replace af "port 22" efterfulgt af
> tilfældige bogstaver/symboler, mellemrum/tabulator og tal indtil der
> kommer EOL?
'.' er et hvilket som helst tegn, så '.*' matcher alle efterfølgende
tegn. I princippet kunne man afslutte med en '$' til at indikere
slutningen af linjen, men det er unødvendigt med sed, da den automatisk
stopper dér.
> Eks:
>
> En fil med mange linjer:
> 1 Dette er port 22, ja det er.
> 2 Dette er port 22, 389 583 9393 asdf, ja det er
> 3 Dette er port 22! +#)#/-!&, gu er det så.
>
> Skal give:
> 1. Dette er port 443, ja det er.
> 2. Dette er port 443, ja det er.
> 3. Dette er port 443, ja det er.
sed 's/port 22.*/port 443, ja det er./'
Mere information findes i 'info sed' og 'man 7 regex'. 'sed' er enormt
brugbar når man lige har fattet den. For eksempel besluttede jeg mig
forleden for at smide KDE API dokumentationen ud på min web-server, men
det viste sig hurtigt at reference-links til QT dokumentationen (som var
lige så vigtig) var relative til mit filsystem. Dette kunne jeg med én
kommando rette op på:
find PATH -type f -name '*.html' -print0 |\
xargs -0 sed -i -e 's;/usr/qt/3/doc/html/;URL;g'
Hvor PATH er KDE API dokumentationens placering på min harddisk og URL
er et link til QT dokumentationen.
--
PeKaJe
An editor is one who separates the wheat from the chaff and prints the chaff.
-- Adlai Stevenson
| |
Martin Jørgensen (09-06-2005)
| Kommentar Fra : Martin Jørgensen |
Dato : 09-06-05 19:34 |
|
Peter Jensen wrote:
-snip-
> find PATH -type f -name '*.html' -print0 |\
> xargs -0 sed -i -e 's;/usr/qt/3/doc/html/;URL;g'
>
> Hvor PATH er KDE API dokumentationens placering på min harddisk og URL
> er et link til QT dokumentationen.
Takker - det ser meget smart ud.
Med venlig hilsen / Best regards
Martin Jørgensen
--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk
| |
Klaus Alexander Seis~ (08-06-2005)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 08-06-05 23:30 |
|
Martin Jørgensen skrev:
>> ... | sed 's/port [0-9]*/port 443/g'
>
> Jeg er med på det meste, men hvad betyder det sidste g?
$ man sed
Mvh,
--
Klaus Alexander Seistrup
Magnetic Ink, Copenhagen, Denmark
http://magnetic-ink.dk/
| |
Dennis Jørgensen (09-06-2005)
| Kommentar Fra : Dennis Jørgensen |
Dato : 09-06-05 19:33 |
|
Klaus Alexander Seistrup <klaus@seistrup.dk> writes:
> Carsten skrev:
>
>>> Ja da: sed "s/port\ /port\ 443/"
>>
>> desvære, den virker ikke helt, [...]
>
> #v+
>
> $ echo "Dette er port 22, ja det er." | sed 's/port [0-9]*/port 443/g'
> Dette er port 443, ja det er.
> $
$ echo "Dette er en anden port end den fra før | sed 's/port [0-9]*/port 443/g'
Dette er en anden port 443end den fra før
$
Mon ikke der skulle være mindst et tal? Det kan selvfølgelig være det
ikke gør en forskel i denne sammenhæng, men ellers skal * (gentaget nul
eller flere gange) skiftes ud med et + (gentaget en eller flere gange).
Mvh.
Dennis Jørgensen
| |
Klaus Alexander Seis~ (09-06-2005)
| Kommentar Fra : Klaus Alexander Seis~ |
Dato : 09-06-05 23:28 |
|
Dennis Jørgensen skrev:
> $ echo "Dette er en anden port end den fra før | sed 's/port [0-9]*/port 443/g'
> Dette er en anden port 443end den fra før
> $
>
> Mon ikke der skulle være mindst et tal? Det kan selvfølgelig være det
> ikke gør en forskel i denne sammenhæng, men ellers skal * (gentaget nul
> eller flere gange) skiftes ud med et + (gentaget en eller flere gange).
Enig.
--
Klaus Alexander Seistrup
Magnetic Ink, Copenhagen, Denmark
http://magnetic-ink.dk/
| |
Thomas Bjorn Anderse~ (20-06-2005)
| Kommentar Fra : Thomas Bjorn Anderse~ |
Dato : 20-06-05 17:31 |
|
Carsten <spam@spam.dk> writes:
> Hej NG
> er det muligt med sed at finde en tekst og udskifte det er måtte stå bag
> efter
> eks. finde 'port' og indsætte '443' bag efter, i strædet for hvad der i
> forvejen måtte stå, så resultatet bliver port 443
perl -pi -e 's/port \d+/port 443/g' filefoo.conf
sed -r -i -e 's/port [0-9]+/port 443/' filefoo.conf
--
Thomas Bjorn Andersen
+++ATH
| |
|
|