neu zu Regex und ein Problem haben. Ich möchte Bindestriche durch Unterstriche an bestimmten Stellen in einer Datei ersetzen. Um die Dinge zu vereinfachen, nehmen wir an, ich möchte den ersten Bindestrich ersetzen. Hier ist ein Beispiel „Datei“:Sed ersetzen Bindestrich mit Unterstrich
dont-touch-these-hyphens
leaf replace-these-hyphens
Ich möchte Bindestriche in allen Linien von
grep -P "leaf \w+-" file
Ich versuchte
sed -i 's/leaf \(\w+\)-/leaf \1_/g' file
gefunden ersetzen, aber es passiert nichts (falsch Ersatz besser gewesen wäre, als nichts). Ich habe ein paar Verbesserungen versucht, aber immer noch nichts. Auch hier bin ich neu, daher denke ich, dass das obige "im Prinzip funktionieren sollte". Was ist daran falsch, und wie bekomme ich, was ich will? Vielen Dank.
Sie verwenden nicht die Regex-Erweiterungen, die '\ w' unterstützen. Sie brauchen 'sed-E' oder' sed -r'. – stevesliva
Gefällt mir? 'sed -i -E 's/leaf (\ w +) \ -/leaf \ 1_/g' Datei' –
@stevesliva GNU sed versteht' \ w' einfach so. Für GNU sed ist der einzige Unterschied zwischen 'sed' und' sed-E' (oder 'sed-r'), was Sie zu entkommen haben. Siehe auch [das Handbuch] (https://www.gnu.org/software/sed/manual/sed.html#regexp-extensions). –