Это ваша командная строка ...
sed "s/<p align="center">*</p>/*/" -i server.html
Проблемы:
- Вы указываете свои команды перед опциями, а не отождествляете команду с
-e
вариант.(Не уверен, что в сознании AIX есть sed.) - Вы не сопоставляете текст с допустимым регулярным выражением.
- Закрывающий абзац имеет косую черту без отступа, которая рассматривается как разделитель.
- Ваша замещающая строка - просто звездочка.
Я бы не использовал sed для этого.Хотя вы, возможно, сможете придумать непонятный, нечитаемый скрипт для обработки этого с помощью GNU sed, он, вероятно, не будет переносимым, и вы не сможете прочитать его через 30 минут после его написания, если выне очень хорошо знакомы с sed и регулярными выражениями.
Вы можете вывести что-то эквивалентное тому, что вы просите, с помощью этого:
sed '/<p/s#<[^>]*>##g' server.html
Обычно возникают проблемы при обработке HTML с помощью регулярных выражений, но еслиЕсли вы работаете только с гарантированно предсказуемым текстом, AWK может быть для вас разумным решением.
#!/usr/bin/awk -f
/^<td/ { line=$0; }
/^<p/ { gsub(/<[^>]*>/,""); line=line $0; }
/^<\/td/ { print line $0; }
Обратите внимание, что это не самый элегантный сценарий awk, который можно написать;все написано более полно, чем нужно, чтобы вы могли видеть тип сопоставления с шаблоном, как обычно, чтобы вы могли настроить его для соответствия другому HTML.
Альтернатива:
#!/usr/bin/awk -f
BEGIN { ORS=""; }
/^<p/ { gsub(/<[^>]*>/,""); }
{ print; }
/^<\/td/ { printf("\n"); }
Другая вещь, на которую вы могли бы обратить внимание, это изменение поведения <p>
внутри <td>
с использованием CSS.