Удалить строку с шаблоном отдельного вхождения в SED? - PullRequest
0 голосов
/ 20 июля 2011

Пожалуйста, потратьте несколько секунд. Я хотел бы удалить строку, которая имеет шестое <ul> вхождение. я гугл способ сделать это, и я попытался

sed -i '/^<ul>$/ d/6' file.

Однако получается

sed: -e expression #1, char 9: extra characters after 

ошибка.

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

AFAIK, вы не можете сделать это легко с sed.Вы можете сделать это, например, объединить все строки в одну строку, затем удалить этот 6-й случай, затем разделить строку, но это проще сделать с awk:

awk '/<ul>/ {ul++} ul == 6 { getline } 1' INPUTFILE > TMPFILE && mv TMPFILE INPUTFILE

Результаты теста приведены здесь: https://ideone.com/3YpVu

Примечание : он отбрасывает всю строку с 6-й <ul> и предполагает, что в каждой строке можно найти только один <ul>.

НТН

1 голос
/ 20 июля 2011
awk '/<ul>/ && ++count == 6 {next} {print}' filename
0 голосов
/ 20 июля 2011

perl -p -i -e "s/^<perl-regex-here>$\n//g" <filename> должен избавиться от любой строки, соответствующей регулярному выражению perl, которое вы даете в любой современной системе Unix. В противном случае, если вы подсчитываете вхождения и убиваете строку с шестым вхождением, я не знаю ни одной команды, которая сделает это в одной строке.

...