你能帮我用sed从dhcp配置文件中删除一些块吗? 文件看起来像:
host dev1 {
host-identifier option agent.circuit-id "test1:418";
fixed-address xxx.xxx.xxx.xxx;
option routers xxx.xxx.xxx.xxx;
option subnet-mask xxx.xxx.xxx.xxx;
}
host host2{
host-identifier option agent.circuit-id "test2-:5";
fixed-address xxx.xxx.xxx.xxx;
option routers xxx.xxx.xxx.xxx;
option subnet-mask xxx.xxx.xxx.xxx;
}
我应该删除由circuit-id匹配的主机的块。我是通过命令做到的:
sed -e '/^host\s*\S*\s*{\s*/ { N; /\s*test1:418/ { N; /[^host]/ { N; /[^host]/ { N; /[^host]/ { N; /[^host]/d}}}}}' -e '/^$/d' /path/to/file
但它似乎根本不可接受...... :(
答案 0 :(得分:1)
如果这是一个isc dhcp服务器,我强烈建议使用omshell
来修改配置。
否则,如果你有GNU gawk
,那么以下gawk '!/test2-:5/' RS='}\n' ORS='}\n' file
^----------------------------------- ID goes here
命令对你来说可能已经足够了:
gawk
该命令仅限于GNU }\n
,因为它使用多行记录分隔符。
说明:
使用host dev1 {
host-identifier option agent.circuit-id "test1:418";
fixed-address xxx.xxx.xxx.xxx;
option routers xxx.xxx.xxx.xxx;
option subnet-mask xxx.xxx.xxx.xxx;
作为记录分隔符,awk将逐块处理文件,而不是默认的逐行模式。意思是awk会看到这些记录:
host host2{
host-identifier option agent.circuit-id "test2-:5";
fixed-address xxx.xxx.xxx.xxx;
option routers xxx.xxx.xxx.xxx;
option subnet-mask xxx.xxx.xxx.xxx;
和
!/test2-:5/
在这些记录中,我们应用正则表达式!
。前面的true
否定了匹配。我们不需要指定更多,因为如果条件评估为\n}
,awk将默认打印当前记录。由于第二条记录与模式匹配,因此无法打印。
输出记录分隔符也使用sed
在打印时添加结束括号。
顺便说一下,:a
我会使用基于标签的循环(/host .*{/
)。我们将输入从}
开始直到结束}
,并将所有行附加到模式缓冲区。一旦达到结束sed '/host .*{/{:a;N;/}/!ba;/test2-:5/d}' file
,我们检查模式缓冲区是否包含ID。如果它包含id,它将被删除:
self.audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setPreferredSampleRate(44100.0)
try audioSession.setPreferredIOBufferDuration(4410.0 / 44100.0)
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
audioSession.requestRecordPermission() {
[unowned self] (allowed: Bool) -> Void in
if allowed {
self.audioEngine = AVAudioEngine()
self.audioInputNode = self.audioEngine.inputNode!
let format: AVAudioFormat = self.audioInputNode.outputFormatForBus(0)
self.audioInputNode.installTapOnBus(0, bufferSize: UInt32(4410), format: format, block: {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in
// buffer length is 16384
})
do {
try self.audioEngine.start()
} catch {}
} else {...}
}
} catch {...}