Подтвердить что ты не робот

Как удалить все строки в файле, начиная с соответствующей строки?

У меня есть файл, состоящий из нескольких строк текста:

The first line
The second line
The third line
The fourth line

У меня есть строка, которая является одной из строк: The second line

Я хочу удалить строку и все строки после нее в файле, поэтому она будет удалять The third line и The fourth line в дополнение к строке. Файл будет выглядеть следующим образом:

The first line

Я искал решение для google, и мне кажется, что я должен использовать sed. Что-то вроде:

sed 'linenum,$d' file

Но как найти номер строки строки? Или, как еще я должен это делать?

4b9b3361

Ответ 1

Если вы не хотите печатать согласованную строку (или любые следующие строки):

sed -n '/The second line/q;p' inputfile

Это говорит о том, что "когда вы достигнете линии, которая соответствует шаблону, закройте, иначе распечатайте каждую строку". Параметр -n предотвращает неявную печать, а для p требуется явно печатать строки.

или

sed '/The second line/,$d' inputfile

Это говорит: "Удалите все строки из вывода, начинающегося с совпадающей строки, и продолжайте до конца файла".

но первая быстрее.

Если вы хотите напечатать согласованную строку, но не следующие строки:

sed '/The second line/q' inputfile

Это говорит о том, что "распечатать все строки и выйти, когда совпадающая строка достигнута" (опция -n (без неявной печати) не используется).

Для получения дополнительной информации см. man sed.

Ответ 2

Это немного короче, чем другие данные решения. Выход из использования капитала Q позволяет избежать печати текущей строки.

 sed '/The second line/Q' file

Чтобы фактически удалить строки, вы можете использовать один и тот же синтаксис.

 sed -i '/The second line/Q' file

Ответ 3

sed '/The second line/q0' file

Или без gnu sed:

sed '/The second line/q' file

Или, используя grep:

grep -B 9999999 "The second line"

Ответ 4

Использование awk (не отображает согласованную строку)

awk '/pattern/ {exit} {print}' file.txt

Ответ 5

Сначала добавьте номер строки и удалите строку

cat new.txt 
The first line
The second line
The third line
The fourth line

 cat new.txt  | nl
     1  The first line
     2  The second line
     3  The third line
     4  The fourth line



cat new.txt  | nl | sed  "/2/d"
     1  The first line
     3  The third line
     4  The fourth line

cat new.txt  |  nl |sed  "3d;4d"
     1  The first line
     2  The second line

с помощью awk

awk 'NR!=3 && NR!=4' new.txt 
The first line
The second line

Ответ 6

awk '/The second line/{exit}1' file