Regex 在ubuntu中使用sed将具有特殊字符的块替换为另一个块
我正在尝试自动替换tripwire配置文件中的一些行: 我在文件中有以下部分: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找到一
#
# 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) ;
}