Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

区切り文字は他に

  • ?
  • :
  • @

等々が使えるようです