удалите только определенные текстовые случаи из строки с помощью sed

Hal является устаревшим. Это просто не сделало его и было отодвинуто. Dbus очень не имеет отношение к аппаратным средствам вообще - это - системная шина сообщения (универсальное средство сообщения между различными компонентами системы). Самая важная общая система управления аппаратными средствами для настольных систем Linux в настоящее время udev. Если Вам интересно, можно прочитать очень хорошее руководство из хинду документации.

3
28.06.2012, 19:21
2 ответа

Поскольку sed соответствия в a greedy способ, всегда существует возможность, что текст мимо конца комментария будет подобран вместо предыдущего реального маркера конца комментария, например, как в заключенной в кавычки строке, которая содержит "* /".
Это не может быть обработано sed простым способом, но можно работать вокруг этого. Вот один такой метод: использование односимвольного заполнителя для конечного ограничителя с двумя символами. Используя шестнадцатеричное значение \x01 поскольку заместитель символов в безопасности (т.е. не столкнется с существующим текстом), поскольку он не существует в обычном тексте.

sed "\|^/\*.*\*/|{ s|\*/|\x01|; s|.*\x01|| }" "$file"

perl, с другой стороны, может дополнительно обработать lazy соответствие (и намного больше). Как уже упомянуто принцем John Wesley в комментариях, вот ленивое perl эквивалентный.

perl -ple 's|/\*.*?\*/||g' "$file"
4
27.01.2020, 21:14
  • 1
    perl пример работал, большое спасибо. Используя Perl и запись вывода в новый файл я сделанный это: perl -ple 's|/\*.*?\*/||g' "txt/crmpicco.txt" > text/new_crmpicco.txt –  crmpicco 29.06.2012, 11:24

Попробуйте этого:

sed 's@/\*[^/]*\*/@@'

К сожалению, это может испытывать трудности с комментариями с / внутри.

Может быть это, будет полезно два варианта вместе: чтобы быть уверенным, что абсолютно все комментарии удалены:

sed 's@/\*[^/]*\*/@@;s@/\*[^*]*\*/@@;'
2
27.01.2020, 21:14

Теги

Похожие вопросы