下記のコマンドのように、grepとsedで文字列抽出する方法を解説します
# コマンド
ll .. | grep admin | sed -n 's/.*sudo\(.*admin\).*/\1/p'
# 以下が出力例
_as_admin
コマンドの解説
*ll .. | grep admin | sed -n 's/.sudo(.admin)./\1/p'
このコマンドは、Linux/Unix系OS上で、カレントディレクトリの親ディレクトリ(..)にあるファイルやディレクトリの一覧から、"admin"という文字列を含む行を抽出し、さらにその行から特定の文字列を抜き出すという処理を行います。
各部分の役割
-
ll ..:
-
ll
はls -l
のエイリアスで、ディレクトリの内容を詳細に表示するコマンドです。 -
..
は親ディレクトリを指します。 - つまり、この部分で親ディレクトリの内容を長形式で表示します。
-
-
| grep admin:
-
|
はパイプで、前のコマンドの出力(ll ..
の結果)を次のコマンドの入力として渡します。 -
grep admin
は、前のコマンドの出力から"admin"という文字列を含む行だけを抽出します。
-
-
*| sed -n 's/.sudo(.admin)./\1/p'
-
sed
はストリームエディタで、テキストストリームを編集するためのコマンドです。 -
-n
オプションは、パターンが一致した場合のみ行を出力するように指定します。 -
's/.*sudo\(.*admin\).*/\1/p'
は置換コマンドで、以下のことを行います。-
s
:置換コマンドの開始 -
.*sudo\(.*admin\).*
:正規表現で、"sudo"という文字列の後に任意の文字列((.*)でキャプチャ)、そして"admin"という文字列が続くパターンにマッチします。 -
\1
:正規表現でキャプチャした部分(つまり、"sudo"と"admin"の間の部分)を置換後の文字列として使用します。 -
p
:置換後の行を出力します。
-
-
全体的な処理の流れ
- 親ディレクトリの内容を詳細に表示する。
- 表示された内容から"admin"という文字列を含む行を抽出する。
- 抽出された行から、"sudo"と"admin"の間の部分だけを抜き出して表示する。
このコマンドで得られる情報
このコマンドを実行すると、通常はファイルのパーミッション、所有者、グループ、サイズなどが表示されますが、このコマンドではさらに絞り込みが行われ、"admin"という文字列が含まれ、かつ"sudo"という文字列の後に"admin"という文字列が続くような行から、その間の部分(おそらくユーザー名やグループ名)だけが表示されます。
使用例
- 目的: 親ディレクトリにあるファイルやディレクトリの中で、"admin"という文字列が含まれ、かつそのファイルの所有者またはグループ名が"admin"であるものを探したい。
- 結果: "admin"という文字列を含む行が複数ある場合、それぞれの行から"sudo"と"admin"の間の部分(ユーザー名またはグループ名)が1行ずつ表示されます。
注意点
- 正規表現の書き方によって、抽出される情報が変わる場合があります。
-
sed
コマンドは強力なツールですが、複雑な処理を行う場合は、正規表現の知識が必要になります。
まとめ
このコマンドは、特定の文字列を含む行から、さらに特定の部分を抜き出すという、テキスト処理の典型的な例です。Linux/Unix系OSのシェルスクリプトなどで、このような処理を組み合わせて複雑な処理を行うことができます。
より詳しい説明が必要な場合は、お気軽にご質問ください。
例:
- 「正規表現の
.
の意味が分かりません」 - 「
\1
とは何ですか?」 - 「もっと具体的な使用例を教えてください」
補足:
- このコマンドは、ファイルのパーミッションや所有者などを調べるために、
ls -l
の出力をパースしているようなものです。 - より正確な情報を取得するためには、
find
コマンドやawk
コマンドを使うこともできます。