Comment supprimer toutes les lignes du fichier texte contenant les mots "chat" et "rat" ?
Réponses
Trop de publicités?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)"
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
- Réponses précédentes
- Plus de réponses