Hinzufügen von Wörtern zu einer Textdatei mit einem einzigen Terminalbefehl (keine Editoren)

22

Ich bin neu in Linux. Ich muss eine .confDatei nur über das offene Terminal bearbeiten und verwende keine Texteditoren. Das heißt, kann ich einer Konfigurationsdatei von einem offenen Terminal aus Wörter und Sätze hinzufügen?

Beispiel: command /home/.../file.conf -add 'abcd'in die 23. Zeile und so weiter. Und zum Schluss, speichern Sie es.

Ist es möglich, ein bestimmtes Wort in dieser Konfigurationsdatei zu suchen und der nächsten Zeile dieser Konfigurationsdatei neuen Text hinzuzufügen, indem nur der Befehl verwendet wird?

user259060
quelle
1
Sieht aus wie sedkann kommen, um zu helfen.
Nitishch
1
Stellen Sie eine einzelne Frage.
Avinash Raj

Antworten:

39

Normalerweise mache ich das so, wenn ich mein Skript programmiere, um dasselbe zu tun, was Sie verlangen, aber programmatisch.

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

Voila! Du hast es. Wichtig zu beachten >>bedeutet, dass eine neue Zeile zu einer vorhandenen Datei hinzugefügt wird, während >einfach alles überschrieben wird.

Faron
quelle
Danke für Ihre schnelle Antwort. Aber ich muss der 23. Zeile meiner .conf-Datei nacheinander mehr als 3000 Wörter hinzufügen. Gibt es einen einfacheren Weg?
user259060
20

Das Hinzufügen von Wörtern und Sätzen zu einer Konfigurationsdatei über ein offenes Terminal ist mit sed problemlos möglich.

sed -i '23iabcd' file.conf

Fügt in Zeile 23 den Text abcdin die Datei einfile.conf

-iführt die Änderung direkt in der Datei durch file.conf.

Wenn Sie dann verwenden möchten awk:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

Im Folgenden wird eine Zeile nach SearchPattern hinzugefügt.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Es fügt eine Zeile unter jeder Zeile, die SearchPattern enthält, neuen Text ein.

Um zwei Zeilen hinzuzufügen, können Sie a verwenden \und eine neue Zeile eingeben, während Sie Neuen Text eingeben.

 sed -i '/pattern/a \
line1 \
line2' inputfile
Stormvirux
quelle
5

Sie können auch den printfBefehl verwenden.

Hinzufügen von Zeilen zu Ihrer Datei

$ printf "\nThis is a new line to your document" >> file.txt

Die Datei überschreiben

$ printf "This overwrites your file" > file.txt
rafaelbattesti
quelle
0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Anmerkungen:

  • Regex ist ein regulärer Ausdruck (auch als Regex bezeichnet), der die Suchkriterien definiert. Reguläre Ausdrücke ermöglichen eine sehr anpassbare Suche und die Syntax, die awk versteht, ist im Handbuch enthalten . Im einfachsten Fall - suchen Sie eine Zeichenfolge "wie sie ist", Zeichen für Zeichen - setzen Sie einfach einen Backslash vor Sonderzeichen (die Liste der Sonderzeichen finden Sie im Handbuch).

Wie es funktioniert:

  • open inputfilezum Lesen der Eingabezeilen, clear outputfileund open zum Schreiben der Ausgabezeilen
  • Führen Sie den Block für jede Zeile in geschweiften Klammern aus:
    • Wenn die Zeile mit dem regulären Ausdruck übereinstimmt, geben Sie die Zeile mit angefügtem Inhalt aus
    • Andernfalls geben Sie dieselbe Zeile aus.
ignis
quelle
0

Ich habe mit dem edBefehl eine Lösung für meine eigene Frage gefunden

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

Text kann 27 Zeilen enthalten. Sie können 27 Zeilen aus einer Textdatei kopieren und 27 Zeilen in Ihre Konfigurationsdatei einfügen. Ich muss den edBefehl jedoch gleichzeitig ausführen, um der gleichen Konfigurationsdatei mehr Text hinzuzufügen.

user259060
quelle