2013-12-11 31 views
0

需要這一個幫助更換一條線,我試圖替換包含通配符sed中含有通配符

原單文件的一行:

command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl $ARG1$ $ARG2$ 

它需要被替換

command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl -w $ARG1$ -c $ARG2$ 
+1

你嘗試過什麼?它是如何去的?一般來說,在不顯示任何企圖的情況下提出問題會非常糟糕。 –

+1

嗨,我試過這些,它不適合我sed's/command [check_cpu] =/usr/local/nagios/libexec/check_aix_cpu.pl $ ARG1 $ $ ARG2 $ /command [check_cpu] =/usr /local/nagios/libexec/check_aix_cpu.pl -w $ ARG1 $ -c $ ARG2 $ /'文件名 – user3091583

回答

1

像這樣的東西可以使它:

sed 's/\([$A-Z0-9]*\) \([$A-Z0-9]*\)$/-w \1 -c \2/' file 

它獲得最後兩個單詞塊(可能的字符:A-Z0-9$)並將它們打印回格式爲-w BLOCK1 -c BLOCK2

輸出如下:

command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl -w $ARG1$ -c $ARG2$ 
0

希望我理解你的權利,請檢查以下awksed的俏皮話:

kent$ cat f 
command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl $ARG1$ $ARG2$ 

kent$ awk '{$2="-w "$2;$3="-c "$3}7' f 
command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl -w $ARG1$ -c $ARG2$ 

kent$ sed -r 's/ \S+/-w&-c /' f  
command[check_cpu]=/usr/local/nagios/libexec/check_aix_cpu.pl -w $ARG1$ -c $ARG2$ 
+0

在最後一個sed上,假設行中沒有其他「空格」(在命令或路徑/文件或$中ARG值)。做得太好了 – NeronLeVelu