У меня есть файл, состоящий из нескольких строк текста:
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
Но как узнать номер строки в строке? Или как еще мне это сделать?
Ответы:
Если вы не хотите печатать совпадающую строку (или любые следующие строки):
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 для получения дополнительной информации.
источник
co -p
например, RCS ), и тогда вам лучше использоватьsed '/The second line/,$d'
нотацию.p
после;
работает.Это немного короче, чем другие данные решения. Выйти с заглавной буквы Q позволяет избежать печати текущей строки.
sed '/The second line/Q' file
Чтобы удалить строки, вы можете использовать тот же синтаксис.
sed -i '/The second line/Q' file
источник
sed '/The second line/q0' file
Или без gnu sed:
sed '/The second line/q' file
Или, используя grep:
grep -B 9999999 "The second line"
источник
sed "/$string/,\$d" inputfile
.Использование awk (не отображается совпадающая строка)
awk '/pattern/ {exit} {print}' file.txt
источник
Сначала добавьте номер строки и удалите строку
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
источник
awk '/The second line/{exit}1' file
источник