Ersetzen Sie die Nummer durch ein sternspezifisches Muster für die gesamte Datei

576
Vishal Patel

In meiner Datei möchte ich die Nummer ersetzen *

Beispiel:

data[0] ---> data[*] 

Ich habe data[0]zu data[127]und will auch für die gesamte Datei zu tun. Also wie kann ich nur für nummer tun?

Ich habe es mit Befehl versucht

sed 's/[[0-9][0-9]]/[*]/g' 

aber es funktioniert nicht richtig.

Also bitte führe mich.

2
Warum sollte es nicht so einfach sein wie `sed's / [0-9] / * / g`? datdinhquoc vor 6 Jahren 0
Es wird sich auch auf andere Nummern auswirken. Nehmen wir an, set_load -pin_load 0.5 [get_ports ], dann ändert sich auch 0,5 in *. Vishal Patel vor 6 Jahren 1
Das Problem in dem, was Sie versucht haben, besteht nicht darin, eckigen Klammern zu entgehen, wenn Sie nicht möchten, dass sie eine besondere Bedeutung haben. simlev vor 6 Jahren 0

2 Antworten auf die Frage

0
datdinhquoc

Dadurch werden alle Ziffern in eckigen Klammern durch Sternchen ersetzt:

sed 's/\[[0-9]*\]/\[*\]/g' 
Ich glaube, es gibt keine Notwendigkeit, den eckigen Klammern im Ersatzteil zu entgehen, da sie dort keine besondere Bedeutung haben. simlev vor 6 Jahren 0
0
simlev

Antwort: So können Sie Ihren vorläufigen SED-Ausdruck ändern ( sed 's/[[0-9][0-9]]/[*]/g'):

sed -E 's/\[[0-9]]/[*]/g' 

Erläuterung:

  • Entfernen Sie die erste eckige Klammer [mit einem Backslash, \da der Ausdruck mit einem Literal [und nicht mit den Zeichen, die Sie in eckigen Klammern schreiben, übereinstimmt . Anschließende eckige Klammern müssen nicht entweichen.

  • Geben Sie an, wie viele Ziffern Sie zuordnen möchten: bedeutet jede natürliche Zahl, die mit 1und bis beginnt 3. Damit dies funktioniert, müssen Sie erweiterte reguläre Ausdrücke mit dem -ESwitch aktivieren (ohne dass Sie damit zufrieden sein könnten sed 's/\[[0-9]*]/[*]/g'). Es sollte in Ihrem vorhanden sein sed, laut man sed:

    Die Option -E wird seit Jahren von GNU sed unterstützt und ist jetzt in POSIX enthalten.


Perl-Alternative hier:

perl -pe 's/data\[\K\d+(?=])/*/g'