タグ

shellscriptに関するdynamicsoarのブックマーク (5)

  • bashで変数を正規表現で置換して変数に代入する方法

    bashで変数を置換して変数に代入する方法を紹介します。 ネットで上記の方法を調べたのですが、bashの変数を正規表現の入力にしたりとか、置換結果を変数に代入する記事があまりみつからなかったので、このエントリーでまとめておきます。 ビギナーの方向けの内容です。文字列置換ではsedを前提とします。 1.問題点 例えば、 00012345 というテキストを含むファイル「foo.txt」から「12345」を抜き出したい場合、コマンドラインで次のように実行します。 #!/bin/sh sed -e "s/[0]*\(12345\)/\1/" foo.txt 上記の内容を「foo.sh」というファイルに保存して実行すると、標準出力に「12345」を出力します。 % ./foo.sh 12345 ですが、以下のことが分かりません。 テキストファイルではなく、bashの変数を入力にしたい 置換後の内容を

    bashで変数を正規表現で置換して変数に代入する方法
    dynamicsoar
    dynamicsoar 2019/09/01
    全く同じところで詰まっていたので助かった…
  • Wait for a process to finish

    Is there any builtin feature in Bash to wait for a process to finish? The wait command only allows one to wait for child processes to finish. I would like to know if there is any way to wait for any process to finish before proceeding in any script. A mechanical way to do this is as follows but I would like to know if there is any builtin feature in Bash. while ps -p `cat $PID_FILE` > /dev/null; d

    Wait for a process to finish
    dynamicsoar
    dynamicsoar 2019/02/21
    “tail --pid=$pid -f /dev/null” まじか…
  • シェルのコマンド履歴から再利用、のいろいろ - 元RX-7乗りの適当な日々

    覚えていると、たまに便利かもしれない"bash"のコマンド履歴の展開に関する技を、例を交えながらまとめてみました。 最後にも書きましたが、他にもたくさんありますので、色々試してみてください。 直前に実行したコマンドを実行 "!!"コマンドで、1つ前に実行したコマンドを再度実行できます。 $ ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7 0 2009-02-26 02:20 test $ !! ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7 0 2009-02-26 02:20 test n個前に実行したコマンドを実行 "!-n"コマンドで、n個前に実行したコマンドを再度実行できます。 例えば、以下の例では、"!-2"とすると、2個前に実行したコマンドを実行しています。 $ ls test $ ls -l 合計 0 -rw-rw-r-- 1 rx7 rx7

    シェルのコマンド履歴から再利用、のいろいろ - 元RX-7乗りの適当な日々
    dynamicsoar
    dynamicsoar 2019/02/18
    “":p"を付けることで、実行されるコマンドが表示される"だけ"で、何のコマンドが実行されるのかを確認” これをやりたかった
  • find -exec でパイプを使った複数コマンドを実行する

    find -exec の中でパイプを使って複数コマンドを実行する方法について説明します。 パイプを使った実行例 ここでは、カレントディレクトリ以下にあるファイルの中身を全て小文字にするコマンドを書くことを例に説明していきます。 一つのファイルだけであれば、次のコマンドでできます。 cat input.txt | tr 'A-Z' 'a-z' > input.txt.lower これをそのまま、find -exec で実行しようとしても上手く動きません。 # 動かない例 find . -type f -name '*.txt' -exec cat {} | tr 'A-Z' 'a-z' > {}.lower \; 原因は -exec の後ろには1つのコマンドしか取れないからです。 find でパイプを使う方法 代わりに、sh -c "実行したいコマンド" と書くことで複数のコマンドを一つのコ

    find -exec でパイプを使った複数コマンドを実行する
    dynamicsoar
    dynamicsoar 2018/12/19
    ワンライナーにこだわらないで for-in を使え、という教え。ありがたい。
  • explainshell.com - match command-line arguments to their help text

    write down a command-line to see the help text that matches each argument

  • 1