Regex 在ubuntu中使用sed将具有特殊字符的块替换为另一个块

Regex 在ubuntu中使用sed将具有特殊字符的块替换为另一个块,regex,bash,sed,ubuntu-14.04,Regex,Bash,Sed,Ubuntu 14.04,我正在尝试自动替换tripwire配置文件中的一些行: 我在文件中有以下部分: # # Critical devices # ( rulename = "Devices & Kernel information", severity = $(SIG_HI), ) { /dev -> $(Device) ; /proc -> $(Device) ; } 我想用这个替换它(更改从/dev/pts行开始) 我正试图通过sed找到一

我正在尝试自动替换tripwire配置文件中的一些行:

我在文件中有以下部分:

#
# Critical devices
#
(
  rulename = "Devices & Kernel information",
  severity = $(SIG_HI),
)
{
    /dev        -> $(Device) ;
    /proc       -> $(Device) ;
}
我想用这个替换它(更改从/dev/pts行开始)

我正试图通过sed找到一个命令,但没有成功

如果有人能告诉我该怎么做,我将不胜感激。
谢谢

您可以将此sed与类似于
~
的备用正则表达式除雾器一起使用,因为搜索和替换模式中存在
/

使用以下数据创建文件调用
new.txt

    /dev/pts        -> $(Device) ;
    #/proc                  -> $(Device) ;
    /proc/devices           -> $(Device) ;
    /proc/net               -> $(Device) ;
    /proc/tty               -> $(Device) ;
    /proc/sys               -> $(Device) ;
    /proc/cpuinfo           -> $(Device) ;
    /proc/modules           -> $(Device) ;
    /proc/mounts            -> $(Device) ;
    /proc/dma               -> $(Device) ;
    /proc/filesystems       -> $(Device) ;
    /proc/interrupts        -> $(Device) ;
    /proc/ioports           -> $(Device) ;
    /proc/scsi              -> $(Device) ;
    /proc/kcore             -> $(Device) ;
    /proc/self              -> $(Device) ;
    /proc/kmsg              -> $(Device) ;
    /proc/stat              -> $(Device) ;
    /proc/loadavg           -> $(Device) ;
    /proc/uptime            -> $(Device) ;
    /proc/locks             -> $(Device) ;
    /proc/meminfo           -> $(Device) ;
    /proc/misc              -> $(Device) ;
然后运行以下命令:

sed -e '/\/proc/{s/.*//; r new.txt' -e '}' file
输出:

#
# Critical devices
#
(
  rulename = "Devices & Kernel information",
  severity = $(SIG_HI),
)
{
    /dev        -> $(Device) ;

    /dev/pts        -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        /proc/sys               -> $(Device) ;
        /proc/cpuinfo           -> $(Device) ;
        /proc/modules           -> $(Device) ;
        /proc/mounts            -> $(Device) ;
        /proc/dma               -> $(Device) ;
        /proc/filesystems       -> $(Device) ;
        /proc/interrupts        -> $(Device) ;
        /proc/ioports           -> $(Device) ;
        /proc/scsi              -> $(Device) ;
        /proc/kcore             -> $(Device) ;
        /proc/self              -> $(Device) ;
        /proc/kmsg              -> $(Device) ;
        /proc/stat              -> $(Device) ;
        /proc/loadavg           -> $(Device) ;
        /proc/uptime            -> $(Device) ;
        /proc/locks             -> $(Device) ;
        /proc/meminfo           -> $(Device) ;
        /proc/misc              -> $(Device) ;
}

谢谢它没有任何作用。仅返回整个文件文本,不替换文本。我想明确地用另外两行替换整个两行。我的意思是,可以在sed中明确引用整行文本,也可以在替换字符串中引用整行文本。怎么做?Thanks@user1902346Sed是一个行阅读器,除非你先抓取下一行,否则你不能在正则表达式中搜索多行。谢谢。所以也许sed对我来说不是正确的命令。还有比sed更适合我的命令吗?@user1902346 sed在这方面与其他任何命令一样好,也许可以在问题中添加一点细节,因为你不完全清楚你想要什么,你想只在这两行同时出现时匹配吗?很高兴知道它成功了,
#
# Critical devices
#
(
  rulename = "Devices & Kernel information",
  severity = $(SIG_HI),
)
{
    /dev        -> $(Device) ;

    /dev/pts        -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        /proc/sys               -> $(Device) ;
        /proc/cpuinfo           -> $(Device) ;
        /proc/modules           -> $(Device) ;
        /proc/mounts            -> $(Device) ;
        /proc/dma               -> $(Device) ;
        /proc/filesystems       -> $(Device) ;
        /proc/interrupts        -> $(Device) ;
        /proc/ioports           -> $(Device) ;
        /proc/scsi              -> $(Device) ;
        /proc/kcore             -> $(Device) ;
        /proc/self              -> $(Device) ;
        /proc/kmsg              -> $(Device) ;
        /proc/stat              -> $(Device) ;
        /proc/loadavg           -> $(Device) ;
        /proc/uptime            -> $(Device) ;
        /proc/locks             -> $(Device) ;
        /proc/meminfo           -> $(Device) ;
        /proc/misc              -> $(Device) ;
}