PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sed 'command1; command2' not working



johannes06
07.10.15, 12:12
Hello,
i have following problem:

pat1="123[0-9]"
rep1="aaaa"

pat2="1+23[0-9]"
rep2="b+bbb"

# sol1
sed -i -e s/$pat1/$rep1/g $outputfile
sed -i -e s/$pat2/$rep2/g $outputfile

# sol2
sed -i -e 's/$pat1/$rep1/g; s/$pat2/$rep2/g' $outputfile

sol1 is working fine sol2 is not doing anything!
Do you have any advise?

Best Regards

BetterWorld
07.10.15, 12:27
Learn to quote! (http://www.grymoire.com/Unix/Quote.html)

Innerhalb von einfachen Hochkommata ' erfolgt KEINERLEI Expansion durch die Shell.
Deshalb werden die vermeintlichen Variablen nicht ausgewertet. Sie sind im sed Kontext keine.
Da der RegEx $pat2 dann letztlich meint: dem Ende der Zeile muss die Zeichenfolge pat2 folgen passiert auch nix.
sed ist sogar so hochnäsig, dass es dir nicht mal zu sagen geruht, dass nach dem Ende einer Zeile in genau dieser Zeile keine Zeichen mehr stehen können.

Schreibe alle sed Scripte in einfach Hochkommata.
Und escape zur shell mit dieser Syntax:
'innerhalb von sed' escaped zur shell ' wieder innerhalb des sed scriptes'
Verwende auf jeden Fall doppelte Anführungszeichen für deine Variablen. Sie könnten Leerzeichen enthalten, was sofort zu Syntaxfehlern führt.
'sed script intern'"$var"'wieder im sed script'

johannes06
07.10.15, 12:29
it works now!

pat11="123[0-9]"
rep1="aaaa"

pat12="1+23[0-9]"
rep2="b+bbb"

# sol1
sed -i "s/$pat1/$rep1/g" $outputfile
sed -i "s/$pat2/$rep2/g" $outputfile

# sol2
sed -i "s/$pat1/$rep1/g; s/$pat2/$rep2/g" $outputfile

johannes06
07.10.15, 12:33
Besten Dank!

BetterWorld
07.10.15, 12:37
nicht lange.
Da eben innerhalb von doppelten Anführungszeichen die Shell expandiert.
Diese Art wirst du dir bald wieder abgewöhnen.

Why do you think that it is useful to use englisch language in a german mother-tongued forum?