3 votes

Comment trouver une chaîne dans un fichier et placer une chaîne au-dessus?

Je voudrais trouver la String __MARKER__ dans someFile.txt et placer une String au-dessus (par exemple Hello World!).

Comment puis-je le faire en utilisant sed?

sed -i -e 's/__MARKER__/Hello world\n__MARKER__/' someFile.txt

Cependant, après avoir exécuté le snippet ci-dessus, le contenu de someFile.txt est le suivant :

Hello worldn__MARKER__

Contenu de someFile.txt avant manipulation :

__MARKER__

Contenu de someFile.txt après manipulation :

Hello World!
__MARKER__

1 votes

Également demandé ici: askubuntu.com/q/1044271/10127 - les réponses là-bas n'ont pas fonctionné pour vous ?

3voto

grg Points 181593

s/…/…/ est une substitution, remplaçant le premier par le second . Vous pouvez utiliser une nouvelle ligne dans votre chaîne pour insérer du texte au-dessus ou en dessous d'un saut de ligne.

sed -i -e 's/__MARKER__/Bonjour le monde\
__MARKER__/' someFile.txt

Échappez la nouvelle ligne avec un antislash, sinon vous obtiendrez "unescaped newline inside substitute pattern". Pour taper une nouvelle ligne dans Terminal, utilisez .

Vous pouvez utiliser & comme raccourci pour la correspondance, afin de ne pas avoir à le retaper dans le remplacement.

sed -i -e 's/__MARKER__/Bonjour le monde\
&/' someFile.txt

0 votes

Et si someFile.txt contient // __MARKER__? Remarquez les //. Dois-je les échapper?

0 votes

@Nicholas Ensuite, vous obtiendrez // Bonjour le monde suivi de __MARQUEUR__ à la ligne suivante. Je ne suis pas sûr de ce à quoi vous faites référence en échappant //, la substitution cherche simplement la chaîne de marqueur et la remplace par la substitution.

2voto

Michael Zhou Points 167

Une autre option est la fonction insert de sed.

input:

cat someFile.txt

output:

apple
orange
grape
pineapple
plum
_MARKER_
banana

input:

sed '/_MARKER_/i\
Hello World!
' someFile.txt

output:

apple
orange
grape
pineapple
plum
Hello World!
_MARKER_
banana

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X