12
votes

Supprimer des parties de la chaîne avec SED

J'ai des lignes de données qui ressemblent à ceci: xxx

Comment puis-je utiliser sed pour supprimer des parties de la chaîne après la 4ème colonne (_ séparé) pour chaque ligne. Enfin cédant: xxx


0 commentaires

6 Réponses :


28
votes

CUT code> est un meilleur ajustement.

sed 's/\(_[^_]*\)\{4\}$//'


0 commentaires

2
votes
sed -e 's/_[0-9][0-9]*_[+-]_contigs_full.fasta$//g'
Still the cut answer is probably faster and just generally better.

0 commentaires

2
votes

Oui, coupé est bien meilleur et oui correspondant à l'arrière de chacun est plus facile.

J'ai enfin reçu une correspondance en utilisant le début de chaque ligne: P>

 sed -r 's/(([^_]*_){3}([^_]*)).*/\1/' oldFile > newFile


0 commentaires

3
votes
sed -e 's/\([^_]*\)_\([^_]*\)_\([^_]*\)_\([^_]*\)_.*/\1_\2_\3_\4' infile > outfile
Match "any number of not '_'", saving what was matched between \( and \), followed by '_'.  Do this 4 times, then match anything for the rest of the line (to be ignored).  Substitute with each of the matches separated by '_'.

0 commentaires

3
votes

Voici une autre possibilité:

sed -E -e 's|^([^_]+(_[^_]+){3}).*$|\1|'


0 commentaires

3
votes

awk aime jouer dans les champs: xxx

ou, plus généralement: xxx


0 commentaires