i einen Bash-Befehl habe, die eine Liste von Dateien, für die ich die Dateinamen ändern muß, erzeugt. so war ich zu denken, so etwas wie dies mit:wie ein awk-Variable mit verändern sed
mycommand | awk {mv $1 altered$1}
das Problem ist, dass der zweite $ 1 geändert werden soll, mit sed einiger regulären Ausdrücke zu ersetzen. Wie kann ich sed auf den zweiten Parameter anwenden?
Ich habe versucht, mit $() und |, aber es funktioniert nicht.
Ich habe auch versucht
awk '{print $1 sed "s/[^A-Za-z0-9._-]/_/g" <<< $1}'
awk: cmd. line:1: Unexpected token
Haben Sie überlegt, die zurückgegebene Liste der Dateinamen von Ihrem Befehl zu durchlaufen und sie mit 'sed' zu modifizieren? 'für den Dateinamen in $ (mycommand); MW $ Dateiname $ tun (Sed "s/[^ A-Za-Z0-9 ._-]/_/g" <<< $ filename); fertig. – Abdou
Beachten Sie, dass ein 'für den Dateinamen in $ (mycommand) 'fehlschlägt, wenn ein Dateiname Leerzeichen enthält. Eine while-Schleife kann das vermeiden. – John1024
erinnern, dass 'awk' die 'sub()' und 'gsub()' Funktionen hat und dass sie das meiste tun können, was 'sed's/str/repl /' 'tun kann. Sie müssen möglicherweise mehrere '[g] sub (/ regex /, "repl", "str") Operationen ausführen, um zu erhalten, was Sie brauchen. Viel Glück. – shellter