89 votes

Comment supprimer les lignes du fichier texte contenant des mots spécifiques via le terminal ?

Comment supprimer toutes les lignes du fichier texte contenant les mots "chat" et "rat" ?

0voto

Indrajeet Gour Points 271

Considérez si vous avez un dossier avec file_name et vous voulez chercher la souris mais en même temps quelques lignes de la souris ayant d'autres mots comme cat y rat et vous ne voulez pas les voir dans votre sortie, donc la seule façon de le faire est -

grep -r mouse file_name | grep -vE "(cat|rat)"

0voto

Sergiy Kolodyazhnyy Points 97292

portable Shell façon

Travaux en /bin/sh que es dash sur Ubuntu, ainsi que ksh y bash . Il est légèrement gênant de devoir écrire plusieurs cas de test pour chaque mot de la liste. case déclaration mais portable. Fonctionne avec les cas où le mot apparaît seul sur la ligne, au début, à la fin de la ligne ou au milieu de la ligne, et ignore les cas où il pourrait faire partie d'un autre mot.

#!/bin/sh
line_handler(){
   # $1 is line read, prints to stdout
    case "$1" in
        cat|cat\ *|*\ cat\ *|*\ cat) true;; # do nothing if cat or rat in line
        rat|rat\ *|*\ rat\ *|*\ rat) true;; 
        *) printf "%s\n" "$1"
    esac
}

readlines(){
    # $1 is input file, the rest is words we want to remove
    inputfile="$1"
    shift

    while IFS= read -r line;
    do
        line_handler "$line" "$@"
    done < "$inputfile"
    [ -n "$line" ] && line_handler "$line" 
}

readlines "$@"

Et voici comment cela fonctionne :

$ cat input.txt                                                                                                                                                        
the big big fat cat
the cat who likes milk 
jumped over gray rat
concat 
this is catchy
rat
rational
irrational
$ ./dellines.sh input.txt                                                                                                                                              
concat 
this is catchy
rational
irrational

0voto

Sox - Points 101
cat logs.txt | grep 'your regex' > logs_regex.txt

Cela va créer un nouveau fichier logs_regex.txt qui est une copie de votre fichier logs.txt avec seulement les lignes contenant votre regex.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X