2016-01-19 38 views
2

我試圖取代自動絆網的一個配置文件中的一些行使用的sed:替換特殊字符到另一個塊的塊在Ubuntu

我在文件中的以下部分:

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

,我想這個來替代它(的變化從/ dev目錄行開始/ PTS)

# 
# 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命令,但我沒有成功。

如果有人能指導我做什麼,我將不勝感激。 謝謝

回答

1

由於/存在於您的搜索和替換模式,您可以使用此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) ; 
} 
+0

感謝。它什麼都不做。只返回整個文件的文本,不會替換文本。我希望明確地用另外兩條線代替整個兩條線。我的意思是有可能明確引用sed中的整行文本,也可以在替換字符串中寫出應該在那裏的整行文本。怎麼做 ?謝謝 – user1902346

+0

@ user1902346 Sed是一個在線閱讀器,除非您先獲取下一行,否則您無法搜索多個行的正則表達式。 – 123

+0

謝謝。所以sed對我來說可能不是正確的命令。任何其他的命令可以比我更適合我嗎? – user1902346