2016-08-31 22 views
0

我在我們公司的dhcp服務器的配置文件中添加了一長串主機。sed將第8個位置的空格字符替換爲選定的文本

的條目是這樣的:

host s1 { hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; } 
host s2 { hardware ethernet b4:e1:0f:06:cb:90; fixed-address 192.168.10.64; } 
host s3 { hardware ethernet b4:e1:0f:06:cb:9d; fixed-address 192.168.10.44; } 
host s4 { hardware ethernet b4:e1:0f:06:cb:aa; fixed-address 192.168.10.65; } 
host s5 { hardware ethernet b4:e1:0f:06:cb:b7; fixed-address 192.168.10.41; } 
host s6 { hardware ethernet b4:e1:0f:06:cb:c4; fixed-address 192.168.10.35; } 
host s7 { hardware ethernet b4:e1:0f:06:cb:d1; fixed-address 192.168.10.36; } 
host s8 { hardware ethernet b4:e1:0f:06:cb:de; fixed-address 192.168.10.67; } 
host s9 { hardware ethernet b4:e1:0f:06:cb:eb; fixed-address 192.168.10.72; } 

我使用vim編輯文件。如何用類似.domain.com替換位置8處的空格字符? (我指的是空間焦炭S1後,S2等

我曾嘗試不同的配置和模式與SED,但由於某種原因,我不能」,它的工作。

的另一種方法是更換空間+ {與我想要的,但這不是我要尋找的解決方案。

問候,

+0

SED -i的/ hardware/dom.com.hardware/g'file1 – chenchuk

+0

您已添加vim作爲標籤。我能回答vim嗎? – SibiCoder

+0

我想你可以...我真的不知道這是如何工作的... –

回答

1

您可以使用此sed

sed 's/host [^ ]*/&.domain.com/g' file 
+2

可以做'sed's//..domain.com/2'文件'而不是..(如果需要,在com後添加一個空格) – Sundeep

+1

我試過你的解決方案,最後想出了: s/host [^] * /&。domain.com/g –

3

(這是一個Vim的答案)

你可以用第7列替換後的第一個空間:

:%s/\%>7c /.domain.com 

但是你的行會不會很漂亮:

host s1.domain.com{ hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; } 

相反,您可以單獨留下該空間:

:%s/\%8c/.domain.com 

並獲得這樣的:

host s1.domain.com { hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; } 

或者你可以用一個簡單的宏做到這一點:

:%normal! 2f i.domain.com<CR> 
1

隨着SED,基於字符數:

sed 's/\(.\{7\}\) /\1domain.com/' file 

編輯文件在放置,加上-i選項:

sed -i 's/\(.\{7\}\) /\1domain.com/' file 
1

要添加.domain.com到第二字在每一行,用Vim:

:%s/\v^(\s*\w+){2}\zs/.domain.com/ 

sed隨着:

sed -r 's/ +/.domain.com /2' file.txt 

隨着awk

awk '{ $2 = $2 ".domain.com" } 1' file.txt