/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste