[tr][tr]{X} in einer langen Dateiliste innerhalb von Bash in [tr][tr]{\tinyX} ändern?

[tr][tr]{X} in einer langen Dateiliste innerhalb von Bash in [tr][tr]{\tinyX} ändern?

Neuling hier. Ich versuche, ein Bash-Skript zu programmieren, das für jede Datei in einem Ordner die folgende Sequenz ersetzt: [tr][tr]{X}wobei X eine beliebige Dezimalzahl (Sammlung von Ziffern und ".") ist, durch [tr][tr]{\tinyX}.

Irgendwelche Ideen?

Danke

Antwort1

Wenn Sie keinen Zugriff auf GNU haben sed, können Sie auch perl(which is -iGNU sedactually borrowed) verwenden:

find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +

Antwort2

Bei GNU sedVerwendung des globalen Ersetzungsmusters s/regexp/replacement/g:

sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*

Dies erfasst die Zeichenfolge [tr][tr]{in einer Gruppe und Xenthält mindestens eine Ziffer oder .(Klammerausdruck [0-9.]\+, der \+die Zeichen innerhalb der Klammern ein- oder mehrmals abgleicht), gefolgt vom Schließen }in einer zweiten Gruppe und ersetzt die übereinstimmenden Teile durch die erste Gruppe \tinyund die zweite Gruppe in jeder Zeile. Die Klammern ()für die Gruppen, die wörtlichen Klammern []und +der wörtliche Backslash \müssen mit einem weiteren Backslash maskiert werden.

Denken Sie daran, vor dem Ausführen dieses Befehls eine Sicherungskopie Ihres Datenordners zu erstellen (oder verwenden Sie -i.backanstelle von , -i''um die Originale als beizubehalten filename.back).

verwandte Informationen