Ich möchte mich dem Ergebnis von ls -1
in eine Zeile einfügen und sie mit einem beliebigen Zeichen abgrenzen.
Gibt es irgendwelche Standard-Linux-Befehle, mit denen ich dies erreichen kann?
Ich möchte mich dem Ergebnis von ls -1
in eine Zeile einfügen und sie mit einem beliebigen Zeichen abgrenzen.
Gibt es irgendwelche Standard-Linux-Befehle, mit denen ich dies erreichen kann?
Ergänzend zur Antwort von majkinetor, hier der Weg zum Entfernen des nachgestellten Trennzeichens (da ich noch nicht unter seiner Antwort kommentieren kann):
ls -1 | awk 'ORS=","' | head -c -1
Entfernen Sie einfach so viele Bytes am Ende, wie Ihr Begrenzer benötigt.
Ich mag diesen Ansatz, weil ich mehrstellige Begrenzungszeichen verwenden kann und weitere Vorteile von awk
:
ls -1 | awk 'ORS=", "' | head -c -2
EDIT
Wie Peter bemerkt hat, werden negative Bytezahlen in der nativen MacOS-Version von head nicht unterstützt. Dies kann jedoch leicht behoben werden.
Installieren Sie zunächst coreutils
. "Die GNU Core Utilities sind die grundlegenden Datei-, Shell- und Textmanipulationsprogramme des GNU-Betriebssystems."
brew install coreutils
Befehle, die auch von MacOS bereitgestellt werden, werden mit dem Präfix "g" installiert. Zum Beispiel gls
.
Sobald Sie dies getan haben, können Sie mit ghead
die eine negative Byte-Anzahl hat, oder besser, machen Sie einen Alias:
alias head="ghead"
Der Sed-Weg,
sed -e ':a; N; $!ba; s/\n/,/g'
# :a # label called 'a'
# N # append next line into Pattern Space (see info sed)
# $!ba # if it's the last line ($) do not (!) jump to (b) label :a (a) - break loop
# s/\n/,/g # any substitution you want
Hinweis :
Dies ist linear in der Komplexität, da nur einmal substituiert wird, nachdem alle Zeilen in den Pattern Space von sed eingefügt wurden.
@AnandRajaseka's Antwort und einige andere ähnliche Antworten, wie zum Beispiel hier sind O(n²), da sed jedes Mal, wenn eine neue Zeile an den Pattern Space angehängt wird, eine Ersetzung vornehmen muss.
Zum Vergleich,
seq 1 100000 | sed ':a; N; $!ba; s/\n/,/g' | head -c 80
# linear, in less than 0.1s
seq 1 100000 | sed ':a; /$/N; s/\n/,/; ta' | head -c 80
# quadratic, hung
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.