2013-05-20 4 views
0

Мой вопрос почти идентичен этому: Bash remove everything after </html>. Однако ответbash удалить все ПРЯМО после html

sed -i '/<\/html>/,$d;$a <\/html>' yourfile 

также лишает бирку. Я пробовал различные команды sed и | еще одна команда для добавления закрывающего тега, но ничего не сработало.

Короче говоря, я пытаюсь удалить все после тега, даже если на той же линии или нет.

+1

'sed '/ <\/html>/q' infile' отлично работает – anubhava

+0

Нет, это не зачищает конечный тег, точнее, он добавляет его обратно в конец. – tripleee

ответ

1

Один из способов:

sed -n '1,/<\/html>/{s!</html>.*!</html>!;p}' input 

Другой:

sed -e 's!</html>.*!</html>!' -e '/<\/html>/q' input 
+0

perreal, спасибо. к сожалению, ни один из них не модифицирует файл. Также даже когда я использую -i. - Первый подход удаляет все из следующей строки вперед после тега (оставляя код после того, как - но на той же линии, как - - Второй подход не может найти файл, независимо от того, как я макет - i/-e. Однако выполнение команд раздельно DOES WORK! Есть ли способ запустить их вместе как одну команду (рекурсивно) в каталоге? –

0
sed -i -n '0,/<\/html>/{s!</html>.*!</html>!;p};q' input 

Это снимает что-либо после того, как </html> на той же линии, и удаляет все последующие строки (только ;q добавил, чтобы perreal первый способ) , -i отлично работает для меня (GNU sed 4.2.1).

Смежные вопросы