Beim Schreiben eines Bash-Skripts ist ein Problem aufgetreten. Bei der grep
Ausgabe werden (normalerweise) viele Zeilen zurückgegeben. Ich möchte jeder dieser Ausgabezeilen einen String voranstellen und anhängen.
Ich möchte auch zu beachten , dass ich kochend ls
in grep
, wie:
ls | grep
bash
shell-script
grep
SpecialBomb
quelle
quelle
ls
- es ist schlecht Juju. Muss es auch seingrep
? Und können Sie ein Beispiel für eine Ausgabe geben?Antworten:
Mit sed:
quelle
sed
als Obermenge vongrep
:ls | sed -n '/txt/s/.*/prefix&suffix/p'
oderls | sed -n 's/.*txt.*/prefix&suffix/p'
Mit
sed
:Beachten Sie jedoch, dass dies unter Problemen mit Dateinamen mit Zeilenvorschüben und all den verschiedenen Problemen beim Parsen leidet,
ls
was im Allgemeinen eine schlechte Idee ist.Mit Perl
Hinweis - Perl
grep
kann wie dergrep
Befehl ein Muster annehmen , aber Sie können auch Dinge wie das Anwenden von Dateitests ausführen.Z.B
Im
grep
Standard$_
ist der Iterator auf den aktuellen Elementwert festgelegt, sodass Sie Regex anwendensed
/grep
formatieren oder eine Vielzahl von Aufgaben ausführen können, die auf dem Wert basieren$_
.quelle
“
und verwenden Sie einfach em.In diesem Fall
find
können Sie mit GNU all diese Dinge auf einmal erledigen, wodurch Pipes und möglicherweise problematisches Parsen von Folgendem vermieden werdenls
:(
find
Ist natürlich keine gute Möglichkeit, die Ausgabe anderer Befehle willkürlich zu ändern!)Einige Notizen:
-maxdepth 1
und-name [^.]*
lassen Sie den Namensvergleich genauso funktionieren wie ein einfachesls
(oderls .
). Sie können einen beliebigen Glob im Shell-Stil verwenden. Beachten Sie jedoch, dass "*" mit einem führenden "" übereinstimmt. in einem Namen † im Gegensatz zubash
, so[^.]*
bedeutet etwas , das nicht hat eine führende „“.*thing.*
anstatt nurthing
-name
/-regex
anstelle von beiden verwenden (zB -regex "[^.]. MYPATTERN. "-printf
unterstützt viele Dinge ,%n
ist der schmucklose Datei- oder VerzeichnisnameAls mögliche Alternative ohne externe Programme erforderlich ist ,
bash
hatcompgen
die unter anderem erweitert Kleckse, das entspricht einerls
ohne Optionen:Dies behandelt Dateinamen mit Leerzeichen, einschließlich Zeilenumbrüchen.
compgen -G "*"
sollte die gleiche Ausgabe wie eine Ebene bereitstellenls
(aber beachten Sie, dass diesls *
eine völlig andere Sache ist). Sie werden noch brauchengrep
, und dies kann das Problem lösen oder nicht, aber es ist eine Erwähnung wert.quelle
sed
undfind
Lösungen werden in Frage gestellt, wenn Ihr Präfix / Suffix Regex-Schlüsselzeichen enthält oder wenn eine Umgebungsvariable (anstelle eines unmittelbaren Werts) übergeben werden soll.xargs
+ ist hierecho
möglicherweise besser geeignet.Mit Umgebungsvariable:
Mit einer Inline:
quelle