Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

sedの内部でpwdを呼び出す

バッククォートを使えば、いろんなコマンドを内部で実行できます。

$ echo Date:`date +%y%m%d`
Date:140224

これはsedでも実行可能です

$ ruby -e "puts ('a'..'x').map {|i| i*3 + i.next * 3 + i.next.next * 3}" > hoge.txt

で生成したデータhoge.txtに対して

$ sed -e "s/eee/`date +%y%m%d`/g" hoge.txt | grep -1 `date +%y%m%d`
bbbcccddd
cccddd140224
ddd140224fff
140224fffggg
fffggghhh

ところが...これをpwdのようなバックスラッシュを含むコマンドでやるとクラッシュします。

$ sed -e "s/eee/`pwd`/g" hoge.txt
sed: -e 表現 #1, 文字数 8: 「s」へのオプションが未知です

これは区切り文字を変更することで対応可能です

$ sed -e "s|eee|`pwd`|g" hoge.txt | grep -3e "`pwd`"
aaabbbccc
bbbcccddd
cccddd/cygdrive/c/Documents and Settings/Lab
ddd/cygdrive/c/Documents and Settings/Labfff
/cygdrive/c/Documents and Settings/Labfffggg
fffggghhh
ggghhhiii
hhhiiijjj

区切り文字は他に

  • ?
  • :
  • @

等々が使えるようです