2013-07-31 28 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 
相关问题