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- -i
Flag 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 sed
suchen ?\n
Daher \
muss jedes Zeichen, das wörtlich gelesen werden soll, maskiert werden, um sed
eindeutig deutlich zu machen, dass es nicht Teil einer reservierten Zeichenfolge ist.