shell脚本 - 编辑影子文件中的行(':'分隔符)

时间:2013-07-31 20:17:36

标签: bash shell sed grep

在以下阴影类型文件中:

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'。有谁知道我怎么做到这一点?

编辑:对不起,我不清楚 - '!!'可能是任何事情。

2 个答案:

答案 0 :(得分: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 :(得分:1)

试试这个:

 sed '/^user4:/s/!!/something else/' file