Как удалить строки из файла до определенного шаблона?

Я должен искать номер строки определенного соответствия в файле – адресе электронной почты – и затем удалить его с начала файла до подобранной строки.

например, Скажем, номер строки 13807. Таким образом, я должен сохранить 13808 + строки неповрежденный.

Вот пример:

$ cat input
some
lines
before
mail@server.com
and
some
more
afterwards

$ cat output
and
some
more
afterwards
4
задан 4 October 2017 в 03:37

2 ответа

Другой awk approachs, включая подобранную строку.

awk '/pattern/, 0' infile

, Исключая подобранную строку.

awk '/pattern/&& getline, 0' infile
2
ответ дан 23 November 2019 в 11:40

sed

sed '1,/mail@server\.com/d'  # excluding the matched line
sed '/mail@server\.com/,$!d' # including the matched line

Объяснения

  • 1,/mail@server\.com/ddэлита каждая строка от строки 1 к (,) mail@server.com
  • /mail@server\.com/,$!d – не делайте (!) dэлита каждая строка от mail@server.com к (,) конец файла ($), но все остальное

Использование

sed '…' 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

awk 'f;/mail@server\.com/{f=1}' # excluding the matched line
awk '/mail@server\.com/{f=1}f'  # including the matched line

Объяснения

  • f – переменная f, переменные 0 = false по умолчанию, awk печать ничто, если выражение false и просто печатает строку, если выражение true
  • /mail@server\.com/{f=1} – если mail@server.com найден установленным f=1, поэтому представляя целое выражение true в следующий раз f происходит в выражении

Использование

awk '…' 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!)
10
ответ дан 23 November 2019 в 11:40

Другие вопросы по тегам:

Похожие вопросы: