シェル・ワンライナー160本ノック week2 1.3.f~問題4
1.3.f
xargs
xargsはコマンドに引数を渡し実行するはたらきをします.以前は出力を横に表示させるはたらきをしていましたが,これはxargsの引数が指定されなかった場合はechoを実行する仕様を使った物です.
1.3.g
bash
bashをコマンドとして使う事でワンライナー上の出力をコマンドとして実行する事が出来ます.awkを使ってmkdir ...という文字列を出力します.
$ seq 4 | awk '{print "mkdir "($1%2 ? "odd_" : "even_")$1 }' mkdir odd_1 mkdir even_2 mkdir odd_3 mdkir even_4
これをコマンドとして実行させたいときはこれにbashを付けます.
$ seq 4 | awk '{print "mkdir "($1%2 ? "odd_" : "even_")$1 }' | bash $ ls -d odd_* even_* even_2 even_4 odd_1 odd_3
問題1
ファイルに記述された文字列から.exeとかかれた行のみを抜き出す問題でした.grepに検索する文字列を正規表現で表現します.ファイルの指定は末尾に記述します.(これが一番分からなかった)
$ grep '\.exe$' files.txt test.exe 画面仕様書.xls.exe
別解と言うほどでもありませんが,files.txtの検索から一括で行う方法を載せます.grep files.txtの出力をxargsで引数として受け取り,grep '\.exe$'とすれば良いです.
$ find shellgei160/ | grep files | xargs grep '\.exe$' test.exe 画面仕様書.xls.exe
また,問題2で習う$(コマンド)というコマンド置換を使えばこう書けます.
$ find shellgei160/ | grep '\.exe$' $(grep files) test.exe 画面仕様書.xls.exe