sed + letztes Wort in jeder Zeichenfolge nur hinzufügen, wenn das Wort nicht vorkommt

sed + letztes Wort in jeder Zeichenfolge nur hinzufügen, wenn das Wort nicht vorkommt

Ich habe folgende Datei:

linuxA.mtt.corp
linux3V
linux4B
linux2A
linux5v.mtt.corp

wie fügt man das .mtt.corpzu jeder Zeichenfolge hinzu, die dieses Wort nicht enthält?

Antwort1

Das geht ganz einfach mit sed:

sed -e '/\.mtt\.corp$/!s/$/.mtt.corp/' <file

Dadurch wird sdas Zeilenende in .mtt.corpjeder Zeile ersetzt, die nicht mit dieser Zeichenfolge endet.

Antwort2

Eine Perl-Lösung:

$ perl -lpe '$_ .= ".mtt.corp" if !/\.mtt\.corp$/' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

Das -pdruckt perljede Zeile der Eingabedatei aus, nachdem das von angegebene Skript angewendet wurde -e, und -lentfernt nachfolgende Zeilenumbrüche aus jeder Eingabezeile und fügt bei jedem printAufruf einen hinzu. Die $_Variable ist die aktuelle Zeile. Das wird also mtt.corpzur Zeile hinzugefügt, wenn es nicht bereits damit übereinstimmt.

Eine awk-Lösung:

$ awk '!/\.mtt\.corp$/{$0=$0".mtt.corp"}1;' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

Die gleiche Idee. .mtt.corpwird zu allen Zeilen ( $0) hinzugefügt, die nicht damit enden, und jede Zeile wird gedruckt ( 1;).

verwandte Informationen