このコマンドが何を意味するかを説明してください。これは私にとって悪夢です。

このコマンドが何を意味するかを説明してください。これは私にとって悪夢です。
sed -e"s@uid=[0-9]*(@@g"-e"s@).*\$@@g"

頑張った

s=検索

[0-9]*= 0-9で始まる数字のみを検索

答え1

あなたのコマンドはsed何の理由もなく(「検索」ではなく置き換える)コマンドの区切り@文字として使用され、s///読みにくいです。

2番目の空白の前にある空白が-eオタイゴ文字列に読みやすくするためのより多くのスペースを提供すると仮定すると、次のようになります。

sed -e "s@uid=[0-9]*(@@g" -e "s@).*\$@@g"

これは以下に関連しています。

sed -e "s/uid=[0-9]*(//g" -e "s/).*\$//g"

一重引用符付きの文字列は次のとおりです。

sed -e 's/uid=[0-9]*(//g' -e 's/).*$//g'

(参考\$$)または

sed 's/uid=[0-9]*(//g; s/).*$//g'

したがって、以下はsed2つの編集式を使用する呼び出しです。

  1. s/uid=[0-9]*(//g

    uid=これは、数字の後に続くすべての部分文字列を置き換え、aは(何も置き換えません(その文字列は削除されます)。末尾を使用すると、g最初の一致だけでなく、行の重複しないすべての一致に対してこれが行われます。

    uid=1(a) uid=2(b)
    

    に変換される

    a) b)
    
  2. s/).*$//g

    これにより、)行の先頭から最後まで何もないものに置き換えられ、すべての内容が削除されます。g行末の固定によって式が一度だけ一致することが保証されるため、ここではこれは必要ありません$

    上記の例は次のとおりです。

    a) b)
    

    今すぐ入場してください

    a
    

    gこれにより、各コマンドの末尾があまりにも多くの事後判断なしに追加されたと考えられます(2番目のコマンドは必ずしも必要ではなく、2番目の式は最初のコマンドのすべてを)削除します)。最初 g不均衡な括弧付きのデータを処理しない限り、効果はありません。これらはおそらく削除する必要があります。

追加の例として、コマンドは次のように変更されます。

this is (line 1) of the file
hello world uid=09(a)  uid=213(b)

入力する

this is (line 1
hello world a

このコマンドのコンテキストについてはよくわかりません(どこで見たのか、何なのか)しなければならないなど)、これについてより詳細に話すか、改善を提案することは困難です。

答え2

私はそれが以下を含む行/変数を取得しようとしていると思います。

uid=500(ジョン・スミス)

...次のように単純化します。

ジョン・スミス

角かっこの外側のすべての項目と角かっこ自体を削除して、角かっこ内から実際の/ユーザー名を抽出しようとします。

もちろん、数字は任意の数字であり、名前は任意の名前であり得る。

関連情報