Удалить строки из двух шаблонов/символов с помощью sed

Одним из примеров этого могут быть системные единицы, которые ссылаются на пути в имени. В таких единицах /заменяется на -(, а ведущий -опускается ). Например, единица монтирования для /home/muruбудет называться home-muru.mount. Точно так же я могу видеть другие имена юнитов на основе пути -, когда я запускаюsystemctl list-units:

sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.5-1\x2d1.5:1.0-host0-target0:0:0-0:0:0:0>
sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.5-1\x2d1.5:1.0-host0-target0:0:0-0:0:0:0>
sys-devices-virtual-misc-rfkill.device          loaded active plugged   /sys/devices/virtual/misc
sys-devices-virtual-tty-ttyprintk.device        loaded active plugged   /sys/devices/virtual/tty/
sys-module-configfs.device                      loaded active plugged   /sys/module/configfs
sys-subsystem-net-devices-eth0.device           loaded active plugged   SMSC9512/9514 Fast Ethern
sys-subsystem-net-devices-wlan0.device          loaded active plugged   /sys/subsystem/net/device

Во многих из них последний компонент пути, который будет частью, заданной %j, может быть полезен внутри модуля. Я не знаю, действительно ли кто-то из них использует это имя, но может быть удобно, например, использовать %j, чтобы получить имя пользователя для генератора единиц монтирования для каталогов в /homeили в /run/user, или похожие.

0
27.09.2020, 19:49
1 ответ

Предполагая, что % Blah blah %не может пересекать границу строки и что Blah blahне содержит %, вы можете использовать

sed 's/%[^%]*%//' file

Добавьте модификатор g, если вам нужно заменить более одного экземпляра шаблона в строке.

3
18.03.2021, 23:02

Теги

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