cat、grep、awk、およびsedコマンドを組み合わせる方法は?

cat、grep、awk、およびsedコマンドを組み合わせる方法は?

これらのコマンドを個別に入力すると、目的の結果が得られます。

cat /var/log/apt/history.log | grep 'apt install' > installation.txt
grep -v "nvidia" installation.txt > tmpfile && mv tmpfile installation.txt
awk -F"ll " '{print $2}' installation.txt > temp1
sed -n '/--/!p' temp1 > temp2
sed -n '/-f/!p' temp2 > installation.txt

しかし、これをどのように組み合わせるべきかわかりません...

以下は、最初に何が間違っているかを理解するためにNVIDIA検索なしで実行したいくつかのテストです。

cat /var/log/apt/history.log | grep 'apt install' > file | awk -F"ll " '{print $2}' file > temp | sed -n '/--/!p' temp > file | sed -n '/-f/!p' file > installation.txt
cat /var/log/apt/history.log | grep 'apt install' > file | awk -F"ll " '{print $2}' file | awk -F"ll " '{print $2}' file | sed -n '/--/!p' file | sed -n '/-f/!p' file
cat /var/log/apt/history.log | grep 'apt install' > file | awk -F"ll " '{print $2}' file > temp | sed -n '/--/!p' temp > file | sed -n '/-f/!p' file > installation.txt

これらのタスクをどのように組み合わせるのですか?

インストールされたパッケージをエクスポートし、私が作成したスクリプトにその機能を含めたいと思います。githubで見つけることができます

内でこのコマンドを使用する必要があります。package.shスクリプト。

答え1

これまでの回答はすべて素晴らしいもので、あなたが望む仕事を扱っています。私の答えは、シェルコマンドの理解(または誤解)に関するものです。

cat /var/log/apt/history.log | grep 'apt install' > file ファイルを読み込んでcat出力できます。必要はgrepなく、ファイル自体を読むことができます。catgrep

> file | awk第二に、ステップにそのようなものがありますgrep。それが何をすべきかわかりません。> file方法」ファイルに直接出力(ターミナルにダンプする代わりに)「しかし| awkスーダンは」出力をキャプチャして次に送信します。awktee2つのことを同時に行うことはできないようです。

答え2

すべてが次のように1つのコマンドにまとめられますawk

awk -F'll ' '
  /apt install/ && !/nvidia|-[-f]/{ print $2 }
' /var/log/apt/history.log >installation.txt

答え3

Commandline:履歴エントリからインストールされているパッケージ名を抽出(およびフィルタリング)する別の方法は、apt単一のsedコマンドを使用することです。

sed -e '/^Commandline: apt install /!d' -e 's///' \
    -e '/nvidia/d' -e '/--/d' -e '/-f/d' \
    </var/log/apt/history.log >installation.txt

両方の式の最初の行は、最初に文字列で始まらないすべての入力行を削除し、次に文字列で始まる行からその文字列を削除しますCommandline: apt install

nvidia2行目には、3つの文字列または--1つを含む行を削除する一連の式が含まれています-f

3行目には入出力リダイレクトが含まれています。


システムに手動でインストールされたパッケージを一覧表示する別の方法は、次を使用することです。

apt list --installed | sed -e '/automatic/d' -e 's,/.*,,'

...リストから自動依存関係でインストールされているすべてのパッケージを削除すると同時に、インストールされているすべてのパッケージが一覧表示されます(この暗黙のコマンドは、名前にそのatuomatic文字列を含むすべてのパッケージも削除します)。

関連情報