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」で。どうすればこれができるか知っている人はいますか?

編集:私が明確ではなくて申し訳ありません-「!!」何でもかまいません。

4

2 に答える 2

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:::
于 2013-07-31T20:27:20.200 に答える
1

これを試して:

 sed '/^user4:/s/!!/something else/' file
于 2013-07-31T20:29:02.413 に答える