Bash-Skript zum Kommentieren und Aufheben der Kommentierung einer Zeile

Bash-Skript zum Kommentieren und Aufheben der Kommentierung einer Zeile

hoffe, es geht Ihnen in dieser Zeit gut. Die Sache ist, dass ich einige Zeilen in meiner txt-Datei kommentieren möchte. Ich habe einen Code zum Kommentieren und Aufheben der Kommentierung mehrerer Zeilen, weiß jedoch nicht, wie ich den Firmennamen herausbekomme. Meine Textdatei hat dieses Schema:lunar_static KKK_<countryname>_NUM 08.00.name

lunar_static KKK_USA_NUM 08.00.Winter
lunar_static KKK_ITALY_NUM 08.Winter
lunar_static KKK_ITALY_NUM 08.00.Spring
lunar_static KKK_ITALY_NUM 08.00.Autumn
lunar_static KKK_SPAIN_NUM 08.00.Winter
lunar_static KKK_SPAIN_NUM 08.00.Spring
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

und ich möchte ITALIEN mit den Namen Autumn, Ferari-Taxi, Delta M, Red_Park kommentieren. Ich weiß, wie man einige Namen mit sed kommentiert, wie

sed -i '/Winter\|Spring/s/^/#/' file2.txt

und entkommentieren

sed -i '/Spring/s/^#//' file2.txt

aber es wählt alle Namen aus, unabhängig vom Ländernamen. Ich weiß nicht, wie ich das Land bekomme. ERWARTETES ERGEBNIS

    lunar_static KKK_USA_NUM 08.00.Winter
    lunar_static KKK_ITALY_NUM 08.Winter
    lunar_static KKK_ITALY_NUM 08.00.Spring
    #lunar_static KKK_ITALY_NUM 08.00.Autumn
    lunar_static KKK_SPAIN_NUM 08.00.Winter
    lunar_static KKK_SPAIN_NUM 08.00.Spring
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    #lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
    lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

Ich freue mich über jeden Tipp. Danke!

Antwort1

Sie müssen Ihr Zielland in den Suchbegriff aufnehmen ITALY, die Alternativen gruppieren (Autumn|Delta....)und die Zeichen zwischen .*den beiden Suchbegriffen berücksichtigen

sed -E '/ITALY.*(Autumn|Delta.. M|Red.._Park|Ferari-taxi)/s/^/#/' file1

Das ist mit einem kleinen Cheat auf die, \um die Fluchten zu vermeiden

sed -E '/ITALY.*(Autumn|Delta\\\\ M|Red\\\\_Park|Ferari-taxi)/s/^/#/' file1

Nehmen Sie die Änderungen in derselben Datei vor, indem Sie das In-Place- -iFlag fürsed

sed -i -E .....

BearbeitenSie hätten dies als eine andere Frage posten können, aber ...

„…ist es möglich, Wörter zu finden, \\ohne sie in sed einzugeben \\\\? …“mit anderen Worten ohneFluchtihnen.

Nein. Und der Grund dafür istHier:

Das Zeichen '\' hat, wenn es von bestimmten gewöhnlichen Zeichen gefolgt wird, eine besondere Bedeutung

Wenn also in Ihrer übereinstimmenden Zeichenfolge das Zeichen nach dem \eines der reservierten Paare bildet (z. B. \+, \?, \n), woher wissen Sie dann, ob Sie nach dem Literal oder einem Zeilenumbruch sedsuchen ?\n

Daher \muss jedes Zeichen, das wörtlich gelesen werden soll, maskiert werden, um sedeindeutig deutlich zu machen, dass es nicht Teil einer reservierten Zeichenfolge ist.

verwandte Informationen