sed: insérer une ligne dans une certaine position

je regardais autour de moi mais je n'ai rien trouvé qui fonctionne pour moi. Je voudrais insérer une nouvelle ligne (en gros un tableau html ligne) sur les autres lignes.

<table id="tfhover" class="tftable" border="1">
<tr><th>HEADER1</th><th>HEADER2</th><th>HEADER3</th><th>HEADER4</th></tr>
<tr><td>Row:1 Cell:1</td><td>Row:1 Cell:2</td><td>Row:1 Cell:3</td><td>Row:1 Cell:4</td></tr>
</table>

alors, est-ce qu'il y a quelqu'un qui peut me suggérer un cmd sed qui insérera un nouveau:

<tr><td>Row:1 Cell:1</td><td>Row:1 Cell:2</td><td>Row:1 Cell:3</td><td>Row:1 Cell:4</td>

juste sous les en-têtes?

Merci!

0
demandé sur iGio90 2013-03-21 22:51:24

1 réponses

donc pour commencer, nous avons un fichier avec les lignes suivantes, appelé datafile.txt

1 some test lines here
but not all lines contain nubers
3 and here is the last one

et nous avons une variable de bash $ADDED avec le contenu de la ligne ce que vous voulez ajouter

ADDED="==This is the new line=="

donc, ajouter une ligne après la première ligne

ADDED="==This is the new line=="
< datafile.txt sed "1a \
$ADDED
"

le résultat:

1 some test lines here
==This is the new line==
but not all lines contain nubers
3 and here is the last line

ajouter la ligne après toutes les lignes ce qui commence par un numéro

< datafile.txt sed "/^[0-9]/a \
$ADDED
"

le résultat:

1 some test lines here
==This is the new line==
but not all lines contain nubers
3 and here is the last line
==This is the new line==

ajouter la ligne au début, ainsi inscrire avant la première ligne

< datafile.txt sed "1i \
$ADDED
"

résultat

==This is the new line==
1 some test lines here
but not all lines contain nubers
3 and here is the last line

Vous pouvez "remplacer" la fin de la ligne pour l'ajout d'un nouveau

< datafile.txt sed "/all/s/$/\
$ADDED/"

dans l'exemple ci-dessus, ajouter après la ligne ce qui contient le mot "all" par substitution

1 some test lines here
but not all lines contain nubers
==This is the new line==
3 and here is the last line

vous pouvez même diviser la ligne et Ajouter entre

< datafile.txt sed "/all/s/\(.*lines \)\(.*\)/\
$ADDED\
/"

le texte ci-dessus cherche la ligne contenant le mot" all "et la divise après le mot"lines". Le résultat:

1 some test lines here
but not all lines 
==This is the new line==
contain nubers
3 and here is the last line

dernière chose. Il est impossible de parsing HTML avec des expressions murales, vérifier le lien dans le commentaire de sputnik.

mais, ce n'est pas moyen qu'il est impossible match certaines parties de fichiers HTML. Si vous savez ce que vous voulez match (et ne pas analyser) - vous pouvez utiliser en toute sécurité l'expression régulière pour HTML aussi. Tout simplement, beaucoup de gens ici ne savent pas la différence entre parsing et matching.

donc, si vos fichiers html ont une structure bien connue, par exemple vous êtes sûr que votre html sera la structure ci-dessus à tout moment, vous pouvez écrire en toute sécurité:

<your_file.html sed "/^<tr><th>/a \
<tr><td>new Row:1 Cell:1</td><td>Row:1 Cell:2</td><td>Row:1 Cell:3</td><td>Row:1 Cell:4</td>
"

et vous obtiendrez

<table id="tfhover" class="tftable" border="1">
<tr><th>HEADER1</th><th>HEADER2</th><th>HEADER3</th><th>HEADER4</th></tr>
<tr><td>new Row:1 Cell:1</td><td>Row:1 Cell:2</td><td>Row:1 Cell:3</td><td>Row:1 Cell:4</td>
<tr><td>Row:1 Cell:1</td><td>Row:1 Cell:2</td><td>Row:1 Cell:3</td><td>Row:1 Cell:4</td></tr>
</table>

simplement parce que nous Non PARSING le code html, nous sommes seulement correspondance certains modèles de ligne..

6
répondu jm666 2013-08-08 13:54:12