J'utilise sed pour filtrer une liste de fichiers. J'ai une liste triée de dossiers et je veux obtenir toutes les lignes après une spécifique. Pour faire cette tâche, j'utilise la solution décrite ici qui fonctionne assez bien avec toutes les entrées que j'ai essayées mais cela ne fonctionne pas lorsque la correspondance est sur la première ligne. Dans ce cas, sed supprimera toutes les lignes de l'entrée
Voici un exemple:
(ssh) fabio@s2 : ~
[0] % ls -1 /
bin
boot
...
sys
tmp
usr
var
vmlinuz
(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/tmp/d'
usr
var
vmlinuz
(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/^bin$/d'
# sed will delete all lines from the input stream
Comment dois-je modifier la commande pour prendre également en compte le cas limite lorsque la première ligne correspond à l'expression rationnelle?
BTW sed '1,1d'
fonctionne correctement et supprime uniquement la première ligne.
essayez ceci (GNU sed uniquement):
sed '0,/^bin$/d'
..la sortie est:
$ sed '0,/^ bin $/d' file boot ... sys tmp usr var vmlinuz
Cette commande sed
imprimera toutes les lignes après et y compris la ligne correspondante:
sed -n '/^WHATEVER$/,$p'
Le -n
le commutateur fait que sed
s'imprime uniquement quand on le lui dit (la commande p
).
Si vous ne souhaitez pas inclure la ligne correspondante, vous pouvez demander à sed de supprimer du début du fichier à la ligne correspondante:
sed '1,/^WHATEVER$/d'
(Nous utilisons la commande d
qui supprime les lignes.)
vous pouvez également essayer avec:
awk '/searchname/{p=1;next}{if(p){print}}'
Je voudrais insérer une balise avant une correspondance et supprimer dans la portée /start/,/####tag####/
.