Je dois rechercher le numéro de ligne d'une correspondance spécifique dans un fichier (adresse électronique), puis le supprimer du début du fichier jusqu'à la ligne correspondante.
par exemple Disons que le numéro de ligne est 13807 . Il faut donc que les lignes 13808 + soient intactes.
Voici un exemple:
$ cat input
some
lines
before
[email protected]
and
some
more
afterwards
$ cat output
and
some
more
afterwards
sed '1,/mail@server\.com/d' # excluding the matched line
sed '/mail@server\.com/,$!d' # including the matched line
1,/mail@server\.com/d
- d
elete toutes les lignes de la ligne 1
à (,
) [email protected]
/mail@server\.com/,$!d
- ne pas (!
) d
elete toutes les lignes de [email protected]
à (,
) à la fin du fichier ($
), mais tout le restesed '…' file > file2 # save output in file2
sed -i.bak '…' file # alter file in-place saving a backup as file.bak
sed -i '…' file # alter file in-place without backup (caution!)
awk 'f;/mail@server\.com/{f=1}' # excluding the matched line
awk '/mail@server\.com/{f=1}f' # including the matched line
f
- variable f
, les variables sont 0
= false
par défaut, awk
n'imprime rien si l'expression est false
et n'imprime que la ligne si l'expression est true
/mail@server\.com/{f=1}
- si [email protected]
est trouvé, définissez f=1
, le rendu de l'expression entière true
la prochaine fois que f
se produira dans l'expressionawk '…' file > file2 # save output in file2
awk -iinplace -vINPLACE_SUFFIX=.bak '…' file # alter file in-place saving a backup as file.bak
awk -iinplace '…' file # alter file in-place without backup (caution!)
Une autre awk
approche, y compris la ligne correspondante.
awk '/pattern/, 0' infile
À l'exclusion de la ligne correspondante.
awk '/pattern/&& getline, 0' infile