5番目の列の値を置き換えます。

5番目の列の値を置き換えます。

複数の文字があります。

Name 1:10:34 date short_id 10 
Name 1:10:45 date short_id 10
Name 1:20:54 date short_id 20
Name 1:30:43 date short_id 30
Name 1:40:43 date short_id 40
Name 1:40:13 date short_id 40
Name 1:20:01 date short_id 20
Name 1:10:01 date short_id 10

5番目の列を交換したいのですが、 sed 's/\b10\b/user1/g'2番目の列を使用しています。

出力は次のようになります。

Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1

- - 更新 - -

user1がなければ名前があり、2番目の列は時間に過ぎず、名前とは何の関係もありません。

このような

Name 1:10:34 date short_id John
Name 1:10:45 date short_id John
Name 1:20:54 date short_id Robert
Name 1:30:43 date short_id Jennifer
Name 1:40:43 date short_id Mary
Name 1:40:13 date short_id Mary
Name 1:20:01 date short_id Robert
Name 1:10:01 date short_id John

ベストアンサー1

まあ、残念ながらそれはsedわかりません。したがって、各ユーザーに対して別の代替ファイルを作成したくない場合は、次の変換テーブルを持つ2番目のファイルを使用することをお勧めします。10Johnusers.txt

10 John
20 Robert
30 Jennifer
40 Mary

次に、両方のファイルをsedこのコマンドに入力します。

sed '/^[0-9]* [[:alnum:]]*$/{H;d;};G;s/ \([0-9]*\)\n.*\n\1 \([[:alnum:]]*\)/ \2/;P;d' users.txt yourfile.log

翻訳テーブルを最初に読み、保存スペースに保存します。他のファイルでは、翻訳を含む予約済みスペースが追加され、可能であれば交換が行われます。その後、P最初の改行文字まで行のみが印刷されるため、ユーザーIDが不明な場合は誤った印刷は行われません。

もっと詳しい説明が気になったらあるファイルで定義されたコンテンツを別のファイルに置き換える方法または楽に聞いてください。

おすすめ記事