web-dev-qa-db-fra.com

Ajouter des mots à un fichier texte en utilisant une seule commande de terminal (sans éditeur)

Je suis nouveau sur Linux. Je dois éditer un fichier .conf à partir du terminal ouvert uniquement et sans utiliser d'éditeur 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' à la 23ème 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 un nouveau texte à la ligne suivante de ce fichier de configuration en utilisant uniquement la commande?

18
user259060

Je fais habituellement de cette façon lorsque je programme mon script pour faire la même chose 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 >> signifie que l’on ajoute une nouvelle ligne au fichier existant entre-temps > tout simplement écraser tout.

33
Faron

Sed peut facilement ajouter des mots et des phrases à un fichier de configuration à partir d’un terminal ouvert.

sed -i '23iabcd' file.conf

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

-i fait la modification directement dans le fichier file.conf.

Si vous souhaitez utiliser awkname__, alors:

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

Le texte suivant ajoute une ligne après SearchPattern.

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

Il insère un nouveau texte une ligne sous chaque ligne contenant SearchPattern.

Pour ajouter deux lignes, vous pouvez utiliser un \ et entrer une nouvelle ligne lors de la saisie du nouveau texte.

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

Vous pouvez également utiliser la commande printf.

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
4
rafaelbattesti
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Remarques:

  • regex est un expression régulière (également appelé regex), il 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 - cherchez une chaîne "telle quelle", caractère par caractère - il suffit de mettre une barre oblique inverse avant les caractères spéciaux (voir la liste des caractères spéciaux dans le manuel)

Comment ça marche:

  • ouvrez inputfilepour lire les lignes d'entrée, décochez outputfileet ouvrez-le 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, affiche la même ligne.
0
ignis

J'ai trouvé une solution à ma propre question à l'aide de la commande ed

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

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

0
user259060