1
votes

commande sed regex pour afficher les lignes qui se terminent par html?

J'ai besoin d'une commande sed regex qui affichera chaque ligne dans un moment qui se termine par 'html', et ne commence PAS par 'a'.

Mon code actuel fonctionnerait-il?

sed 's/\[^a]\*\.\(html)\/p' text.txt


2 commentaires

Bienvenue dans Stack Overflow. Je pense que cette commande ne fonctionnera pas. Mais voici une bonne approche: essayez d'écrire une commande qui imprime chaque ligne qui ne commence pas par «a», et une autre commande qui imprime chaque ligne qui se termine par «html». Chacun de ces éléments est beaucoup plus facile que votre problème actuel, et une fois que vous les avez tous les deux, il vous sera facile de les combiner.


Pourquoi sed est-il obligatoire? Cela fait-il partie d'un programme sed plus large? Modifiez-vous le code existant? Plus de contexte nous permettra de fournir de meilleures réponses.


3 Réponses :


0
votes

Sed complique un peu les choses ... vous pouvez utiliser grep pour gérer cela facilement!

cat file | tr -d '\n' ' '
//It converts all newlines into a space!

sont fonctionnellement équivalents.

ou

pipe input |  xargs -n1 egrep "^[^a].+\.html$" > text.txt

//xargs  -n1 means take the stdin from the pipe and read it one line at a time in conjunction with the single command specified after any other xargs arguments
// ^ means from start of line, 
//. means any one character
//+ means the previous matched expression(which can be a 
//(pattern group)\1 or [r-ange], etc) one or more times
//\. means escape the single character match and match the period character

//$ means end of line(new line character)
//egrep is short for extended regular expression matches which are really 

sympa (en supposant que vous n'utilisez pas de pipe ou de cat, etc.)

Vous pouvez convertir un fichier délimité par une nouvelle ligne en une seule ligne d'entrée avec cette commande:

egrep "^[^a].+\.html$" -f sourcefile > text.txt
//loads file from within the program egrep

egrep "^[^a].+\.html$" < sourcefile > text.txt
//Converts stdin file descriptor with the input redirect 
//to sourceFile for this stage of the` pipeline 

Quoi qu'il en soit, soyez créatif avec des utilitaires simples et vous pouvez faire beaucoup de choses:

xargs, grep, tr sont un bon combo facile à apprendre. Sans la séduction de tout cela.


0 commentaires

0
votes

Ne faites pas cela avec sed. Faites-le avec deux appels différents à grep

grep -v ^a file.txt | grep 'html$'

Le premier grep récupère toutes les lignes qui ne commencent pas par "a", et envoie la sortie de celle-ci dans le second grep, qui extrait toutes les lignes qui se terminent par "html".


2 commentaires

Quel est l'avantage de le faire avec un tuyau alors qu'il peut s'agir d'une seule expression?


Parce qu'il peut être plus facile de comprendre que les choses se décomposent en morceaux distincts.



2
votes

La commande sed serait

grep '^[^a].*html$'

Mais la commande canonique pour imprimer les lignes correspondantes est grep :

sed -n '/^[^a].*html$/p'


1 commentaires

Que faire si la ligne ne contient que html ?