2016-06-01 7 views
1

Für jede Zeile außer der ersten Zeile in meiner Datei möchte ich überprüfen, ob eine Zeichenfolge bereits vorhanden ist. Wenn es so ist, dann tu nichts. AndernfallsErsetzen Sie eine Zeichenfolge durch eine andere Teilzeichenfolge mit sed in Shell-Skript

Für ex die Zeichenfolge in der Zeile anhängen - es gibt folg 3 Zeilen in meiner Datei

line1 : do_not_modify 

line2-string-exists 

line3 

ich -string-exists nur auf jene Zeilen in der Datei angehängt werden soll, die nicht die Zeichenfolge angefügt muss sie (Ignorieren sie die erste Zeile)

die ausgegeben werden soll -

line1 : do_not_modify 

line2-string-exists 

line3-string-exists 

Bitte sagen sie mir, wie ich es tun mit sed? Oder ist es möglich, mit awk zu tun?

+2

Es ist möglich, das Problem mit 'sed' oder' awk' zu lösen. Was hast du bisher versucht? –

Antwort

4
$ cat data 
line1 : do_not_modify 
line2-string-exists 
line3 

$ sed '1!{/-string-exists/! s/$/-string-exists/}' data 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 

oder mit awk:

$ awk '{if(NR!=1 && ! /-string-exists/) {printf "%s%s", $0, "-string-exists\n"} else {print}}' data 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 
+0

Danke! geschweifte Klammern fehlten von meinem Befehl. Es funktioniert jetzt – Manisha

1

können Sie verwenden diese sed Befehl:

sed -E '/(do_not_modify|-string-exists)$/!s/$/-string-exists/' file 

line1 : do_not_modify 
line2-string-exists 
line3-string-exists 

Oder awk mit:

awk '!/(do_not_modify|-string-exists)$/{$0 = $0 "-string-exists"} 1' file 
+2

Ich glaube nicht, dass "do_not_modify" tatsächlich in der Eingabedatei vorhanden ist. –

+1

Ja könnte sein OP hätte 'awk' gewünscht NR> 1 &&!/- string-exists $/{$ 0 = $ 0 "-string-exists"} 1 'Datei' – anubhava

0

Angenommen, die Zeichenfolge enthält keine RE-Metazeichen:

$ awk 'BEGIN{s="-string-exists"} (NR>1) && ($0!~s"$"){$0=$0 s} 1' file 
line1 : do_not_modify 
line2-string-exists 
line3-string-exists 
Verwandte Themen