1

次のテキストを含むファイルinput.txtがあります

Total users:

    abc
    xyz
    pqrs

ユーザー数は変更される可能性がありますが、常に少なくとも 1 人のユーザーが存在します。sed を使用してユーザー名をワイルドカード '*' に置き換えたい

Total users:

    *   

「Total users:」文字列を探して、その後のすべてを * に置き換える方法はありますか。何かのようなもの

sed s/Total users: \n[Till EOF]/Toal users: \n*/g
4

3 に答える 3

1

一方通行:

$ sed '3,$s/\S*$/*/' file
Total users:

    *
    *
    *

これによりs/\S*$/*/、ファイルの 3 行目から最後の行まで3,$置換が行われ、置換によって行末までの空白以外の文字が単一の に置き換えられます*。ユーザー名にスペースを許可すると失敗するため、実際のファイルに合わせて置換コマンドを変更しました。より堅牢な代替品は次のとおりです。

$ sed -r '3,$s/(\s+).*/\1*/' file
Total users:

    *
    *
    *

これにより、最初の空白の後が単一の に置き換えられ*ます。変更をファイルに保存する場合は、次のオプションを使用し-iます。

$ sed -ri '3,$s/(\s+).*/\1*/' file

編集:

すべてのユーザーを単一の に置き換えるには*:

$ sed -r '3{s/(\s+).*/\1*/;q}' file
Total users:

    *

このファイルの作成は、質問をするよりもはるかに迅速でした。

于 2013-08-13T16:43:51.220 に答える
1

これはあなたが必要とするものかもしれません

sed -e "/Total users:/b; s|^\([[:blank:]]*\)[^[:blank:]]\+\(.*\)|\1*\2|" input.txt
于 2013-08-13T16:48:25.807 に答える