26

私はbashを初めて使用しますが、それは学校の科目の1つです。演習の1つは次のとおりです。

自分のログインに関する情報があるファイル「/etc/passwd」の行番号を指定します。

USERNAME私自身のログインIDであるとすると、次のようにして完全に実行できました。

 cat /etc/passwd -n | grep USERNAME | cut -f1

これは単に必要な行番号を示しただけです(より最適化された方法があるかもしれません)。ただし、スクリプトを作成したり変数を使用したりせずwhoamiに、コマンドをより一般的にして、の出力を使用してgrepパターンを表す方法があるかどうか疑問に思いました。つまり、次のように読みやすい1行のコマンドを維持するには、次のようにします。

 cat /etc/passwd -n | grep (whoami) | cut -f1

これが本当に初心者の質問である場合は申し訳ありません。

4

3 に答える 3

35
cat /etc/passwd -n | grep `whoami` | cut -f1 

コマンドを`マークで囲むと、コマンドが実行され、ラップされているコマンドに出力が送信されます。

于 2012-04-23T12:54:22.363 に答える
14

これは、1回のawk呼び出しで実行できます。

awk -v me=$(whoami) -F: '$1==me{print NR}' /etc/passwd

さらに詳細に:

  • と呼ばれる変数-vを作成し、ユーザー名を入力します。awkme
  • これにより-F、フィールドセパレータが:パスワードファイルに適したものに設定されます。
  • 最初の$1==meフィールドがユーザー名と一致する行のみを選択します。
  • printレコード番号(行)を出力します。
于 2012-04-23T13:03:12.837 に答える
11

bashマニュアルページでコマンド置換を確認してください。

あなたはダニ``やを戻すことができます$()、そして個人的に私は後者を好みます。

だからあなたの質問のために:

grep -n -e $(whoami) /etc/passwd | cut -f1 -d :

の出力をコマンドのフラグのwhoami引数として置き換え、コマンド全体の出力は実行中のユーザーの行番号になります。-egrep/etc/passwd

于 2012-04-23T12:58:04.343 に答える