Nehmen wir an, Sie eine Schnur durch bash sind kochend:
# this is your starting code
f() { tr -d [[:digit:]] | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]\nčšž'; }
# defining a test variable
s='hello123WORLD456'$'\n''čšž'
f <<<"$s" # writes "helloworld", a newline, then "čšž"
... kann trivialerweise durch die Kombination von ersten und dritten geändert werden, da sie beide die gleiche grundlegende Operation (Löschen aller Zeichen in ein gegebener Satz - auch wenn in einem der beiden Fälle der Satz in einer ausschließenden Weise definiert ist):
# this behaves the same way
f() { tr '[:upper:]' '[:lower:]' | tr -cd '[:alpha:]\nčšž'; }
... jedoch, wenn eine moderne bash Release läuft, können Sie die gleiche Sache mit einem tun Paar von Parametererweiterungen, ohne den Overhead des Laufens tr
:
s_lowercase=${s,,}
s_alpha=${s_lowercase//[![:alpha:]čšž]/}
echo "$s_alpha"
Die erste und dritte können Sie definitiv kombinieren, nur durch Ändern der ': alnum:' zu ': alpha:' in der dritten und Löschen der ersten. –
das heißt, wenn Sie dies von Bash für eine kurze Zeichenfolge aufrufen, wird Ihre * beste * Leistung wahrscheinlich durch Eliminierung von 'tr' insgesamt und mit Shell-Builtins statt haben; Die Startkosten (zum Starten von "tr") übersteigen das, was Sie durch die schnellere Laufzeitleistung von tr im Vergleich zu integrierten Vorgängen erzielen. –
... welche spezielle Bash-Version verwenden Sie? –