2013-07-31 57 views
0

在下面的陰影類型的文件:殼腳本 - 在影子文件編輯中的行(「:」分隔符)

user1:*:11111:0:88888:7::: 
user2:*:11111:0:88888:7::: 
user3:!!:11111:0:88888:7::: 
user4:!!:11111:0:88888:7::: 
user5:!!:11111:0:88888:7::: 
user6:!!:11111:0:88888:7::: 

我需要找到用戶4,例如,更換「!!」與'something_else'。有誰知道我該怎麼做?

編輯:對不起,我不清楚 - '!!'可以是任何東西。

+1

我不知道有什麼用'做......我可以通過每一行遍歷一個文件而讀線;做...完成<「$ PWD /影子」'並替換,但這不會結束我想做的。我也可以做'sed s/user4:!!/user4:「$ something_else」',但是'user4:'後面的項並不總是'!!' – SheerSt

+0

我會非常不推薦使用shell腳本編輯關鍵系統文件 - I我們看到他們中的很多人變壞,導致系統無法使用。使用適當的工具(例如'passwd'等)進行這些更改 - 它們更有可能被寫入,以考慮磁盤的全部條件,併發更改,文件的正確語法,與其他資源的依賴關係,等等... – twalberg

回答

2

您附近有您的命令。最好只在被搜索的行中使用替代命令,而不是試圖匹配文字使用[^...]以匹配未找到的字符,在本例中爲冒號。嘗試:

sed '/^user4:/ s/:[^:]*/:something_else/' infile 

它產生:

user1:*:11111:0:88888:7::: 
user2:*:11111:0:88888:7::: 
user3:!!:11111:0:88888:7::: 
user4:something_else:11111:0:88888:7::: 
user5:!!:11111:0:88888:7::: 
user6:!!:11111:0:88888:7::: 
1

試試這個:

sed '/^user4:/s/!!/something else/' file 
相關問題