シェルでリストの操作を実行する

シェルでリストの操作を実行する

削除したいパッケージのリストがあります。アンインストーラはpkg_deinstallパッケージリストをアンインストールパラメータとして使用しません。 foreachループのようなリストからどのようにアンロードしますか?

[root@fbsd01 /usr/ports/editors/vim]# pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/'
bigreqsproto
compositeproto
damageproto
fixesproto
fontsproto
inputproto
kbproto
randrproto
renderproto
xcb
xcmiscproto
xextproto
xf86bigfontproto
xineramaproto

同様のコマンドが機能すると思いますが、ストリームの代わりにパラメータとしてリストを渡す必要があります。pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/' | head -n 1 pkg_deinstall

どのプログラムと構文を使用すべきかについての手がかりを提供してください。個人差があるため、正確な回答ができない場合があります。私の問題が複雑すぎる場合は、誰かがlsディレクトリ内のファイルに対して何をするかを教えてください。

ベストアンサー1

最も基本的な「foreach」の場合は、xargsいくつかのパラメータを読み取り、それを別のコマンドラインに追加します。たとえば、次のことを試すことができます。

> cut -d: -f1 /etc/passwd | xargs -n1 echo user:

-d'\n'ユーザー名にスペース文字を含めることができる場合は、パラメータを渡す必要があります。xargs同じコマンドに1つの引数をすべて追加するには、次のようにします。

> cut -d: -f1 /etc/passwd | xargs echo users:

より一般的なループの場合は、次のものを使用できます。

> cut -d: -f1 /etc/passwd | while read i; do echo $i; done

今回は、$i1つ以上のコマンドシーケンスのどこにでも配置できます。入力は一度に1行ずつ読み取られ、変数に保存されますi。 ²行を分割して複数の変数に保存することもできます。

> cut -d: -f1,6 /etc/passwd --output-delimiter=' ' | \
  while read i j; do echo home directory of user $i is $j; done

生ファイル名を繰り返す場合は、次の方が良いです(コメントを参照)。

> for i in *.txt; do echo file: $i; done


1. より正確には、システムが許可する金額です。 2.変数
に応じてIFS

おすすめ記事