Dans un fichier avec beaucoup de lignes, je veux supprimer les lignes commençant par HERE IT IS
.
Comment puis-je faire cela en utilisant uniquement des outils de ligne de commande?
command-line
text-processing
micgeronimo
la source
la source
vim
comme cecivim '+g/^HERE IT IS/d' +wq test.txt
Réponses:
Essayez
sed
:AVERTISSEMENT: il est préférable d'effectuer une sauvegarde lors de l'utilisation d'un
-i
commutateur desed
:Le fichier d'origine restera tel que
<file>.bak
et le fichier modifié sera<file>
.la source
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file
.En plus de la très bonne
grep
et lessed
réponses que vous avez reçu, voici quelques autres outils qui peuvent faire la même chose:Quelques façons Perl:
Vous pouvez ajouter le
-i
commutateur à l'un des exemples pour modifier le fichier en place:(rester bouche bée
Les versions plus récentes (4.1.1 et ultérieures) de GNU
awk
(par défautawk
sous Linux) peuvent également modifier le fichier en place:Shell (
bash
,zsh
,ksh
, probablement d' autres). C'est assez idiot cependant, cela peut être fait mais d'autres outils sont meilleurs.la source
bash
celui m'a fait LOL)printf "%s\n" "$line"
: en citant $ line pour préserver les espaces blancs et en évitant certains problèmes d'écho (interprétation de caractères spéciaux, etc.). et évite la nécessité d'ajouter--
aussi.IFS=
et-r
, je peux aussi bien aller jusqu'au bout et le rendre robuste.J'utiliserais
grep
pour les filtrer. Par exemple :Ensuite, déplacez le fichier externe vers le fichier inférieur.
la source
sed
est définitivement la voie à suivre.Cette légère modification de la commande que @heemayl vous a donnée supprimera la ligne, que le même cas soit utilisé dans le modèle ou non, en raison du I dans la référence du modèle.
Si vous aviez plusieurs fichiers dans un répertoire sur lequel vous vouliez le faire, vous pouvez le combiner avec find like so.
L'option maxdepth signifie que cela ne se reproduira pas dans les répertoires.
la source
Une autre option python:
Où f est le chemin d'accès au fichier, entre guillemets.
la source
Grep
(?!HERE IT IS)
assertion d'anticipation négative qui fait que le moteur d'expression régulière ne correspond à toutes les limites de début de ligne ( qui sont généralement mises en correspondance par^
) que s'il n'est pas suivi par la chaîneHERE IT IS
python
Enregistrez le script dans un fichier, dites
script.py
, puis exécutez-le via la commande ci-dessous sur le terminal.la source
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
, mais ce n'est pas beaucoup plus efficace questartswith
. Je me demandais comment[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
ne produirait pas la sortie dans une liste.Vous pouvez utiliser Vim en mode Ex:
g
recherche globaled
supprimerx
sauver et fermerla source