Ajouter des mots à un fichier texte à l'aide d'une seule commande de terminal (pas d'éditeurs)


22

Je suis nouveau sur Linux. J'ai besoin de modifier un .conffichier à partir du terminal ouvert uniquement et sans utiliser d'éditeurs de texte. Autrement dit, puis-je ajouter des mots et des phrases à un fichier de configuration à partir d'un terminal ouvert?

Exemple: command /home/.../file.conf -add 'abcd'jusqu'à la 23e ligne et ainsi de suite. Et enfin, enregistrez-le.

Est-il possible de rechercher un mot spécifique dans ce fichier de configuration et d'ajouter du nouveau texte à la ligne suivante de ce fichier de configuration en utilisant uniquement la commande?


1
On dirait que ça sedpeut venir pour aider.
nitishch

1
Posez une seule question.
Avinash Raj

Réponses:


39

Je fais généralement de cette façon lorsque je programme mon script pour faire de même ce que vous demandez, mais par programme.

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

Voila! Tu l'as eu. Il est important de noter >>que l'ajout d'une nouvelle ligne au fichier existant, >tout en écrasant tout simplement.


Merci de votre réponse rapide. Mais j'ai besoin d'ajouter plus de 3000 mots à la 23e ligne de mon fichier .conf de manière séquentielle. Existe-t-il un moyen plus simple?
user259060

20

Ajouter des mots et des phrases à un fichier de configuration depuis un terminal ouvert peut être facilement réalisé avec sed.

sed -i '23iabcd' file.conf

insère à la ligne 23 le texte abcddans le fichierfile.conf

-ieffectue la modification directement dans le fichier file.conf.

Si vous souhaitez utiliser awkalors:

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

Ce qui suit ajoute une ligne après SearchPattern.

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

Il insère du nouveau texte une ligne sous chaque ligne qui contient SearchPattern.

Pour ajouter deux lignes, vous pouvez utiliser un \et saisir une nouvelle ligne tout en tapant Nouveau texte.

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

Vous pouvez également utiliser la printfcommande.

Pour ajouter des lignes à votre fichier

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

Pour écraser le fichier

$ printf "This overwrites your file" > file.txt

0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Remarques:

  • regex est une expression régulière (également connue sous le nom de regex), elle définit les critères de recherche. Les expressions régulières permettent des recherches très personnalisables et la syntaxe comprise par awk est dans le manuel . Dans le cas le plus simple - recherchez une chaîne "telle quelle", caractère par caractère - mettez simplement une barre oblique inverse avant les caractères spéciaux (voir le manuel pour la liste des caractères spéciaux)

Comment ça fonctionne:

  • ouvrir inputfilepour lire les lignes d'entrée, effacer outputfileet l'ouvrir pour écrire les lignes de sortie
  • pour chaque ligne, exécutez le bloc entre accolades:
    • si la ligne correspond à l'expression régulière, affichez la ligne avec le contenu ajouté
    • sinon, sortez la même ligne.

0

J'ai trouvé une solution à ma propre question en utilisant la edcommande

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

Le texte peut contenir 27 lignes. Vous pouvez copier 27 lignes à partir d'un fichier texte et coller 27 lignes dans votre fichier de configuration. Mais je dois exécuter la edcommande simultanément afin d'ajouter plus de texte au même fichier de configuration.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.