[DATA]Index=0060 TittleName=【は】美の京都遺産_0129 [DATA]Index=0060 Status=2 [DATA]Index=0060 ResType=0 [DATA]Index=0060 Formet=4 [DATA]Index=0060 Reserve1=0 [DATA]Index=0060 Reserve2=0 [DATA]Index=0060 Start=2006/01/29/06/15 [DATA]Index=0060 End=2006/01/29/06/30 [DATA]Index=0060 TvChannel=4 [DATA]Index=0060 TvAudioMode=2 [DATA]Index=0060 DeviceId=0 [DATA]Index=0060 FileName=/mnt/share/【は】美の京都遺産_0129.mpg [DATA]Index=0060 DataKey=1138482900のように出力される。
[DATA]Index=0060 DataKey=1138482900の DataKey= の右辺(1138482900)で、具体的には
少々汚いスクリプトになってしまった、、、(汗)
#!/bin/sh TMPFILE=/tmp/remove_list.$$ /usr/local/PCast/DbAcRap GetPlListBottom > $TMPFILE sed -n -e 's/^.*Index=\([0-9]*\)[ ]*FileName=\(.*\)/\1 \2/p' $TMPFILE | while read Index FileName do if [ ! -f $FileName ] then echo $FileName not found | nkf -e DataKey=`sed -n -e 's/^.*Index='$Index'[ ]*DataKey=\(.*\)/\1/p' $TMPFILE` /usr/local/PCast/DbAcRap DelPlKey\{$DataKey\} fi done rm $TMPFILE
#!/bin/sh
インタプリタとして /bin/sh を使いますよという合言葉
TMPFILE=/tmp/remove_list.$$
テンポラリファイルの指定。
$$ にはスクリプトの PID が入るのでユニークなファイル名となり、
バッティングすることがない。
同時に複数起動することがなければ余り意味はない。
/usr/local/PCast/DbAcRap GetPlListBottom > $TMPFILE
/usr/local/PCast/DbAcRap GetPlListBottom を実行し、
その結果(の標準出力)をテンポラリファイルにセーブする
sed -n -e 's/^.*Index=\([0-9]*\)[ ]*FileName=\(.*\)/\1 \2/p' $TMPFILE |
これは複雑。
(
^.*:行頭から何らかの文字があって、
Index=\([0-9]*\):Index=に続く数字列があれば一つ目のバッファに記憶し、
[ ]*:スペースかタブがいくつかあって、
FileName=\(.*\):FileName=に続く文字列があれば2つ目のバッファに記憶
)に一致する行があれば、それを
一つ目のバッファ(スペース)二つ目のバッファ
に置き換える。
つまり、
[DATA]Index=0060 FileName=/mnt/share/【は】美の京都遺産_0129.mpg
という条件に一致する行を
0060 /mnt/share/【は】美の京都遺産_0129.mpg
に置き換える。
行末に | があるので、次のコマンドの標準入力とする
while read Index FileName
標準入力が EOF になるまで行を読込み、
1フィールド目を Index という変数に、
2フィールド目を FileName という変数に代入、
do 〜 done までを実行する。
上記の例だと
Index は1フィールド目の「0060」
FileName は2フィールド目の「/mnt/share/【は】美の京都遺産_0129.mpg」
となる。
if [ ! -f $FileName ]
もし FileName で示されたファイルが存在しないなら、then 〜 fi を実行
echo $FileName not found | nkf -e
気休めにメッセージを表示。
FileName は S-JIS なので、nkf で EUC に変換
DataKey=`sed -n -e 's/^.*Index='$Index'[ ]*DataKey=\(.*\)/\1/p' $TMPFILE`
疲れてきた。
sed は「[DATA]Index=0060 DataKey=ホゲホゲ」という行を探し、
ホゲホゲを標準出力に出力する。
コマンドが`(逆シングルコート)でくくられた場合、
その標準出力を文字列と扱う。ここでは、DataKey に代入
結果、DataKey は 1138482900
/usr/local/PCast/DbAcRap DelPlKey\{$DataKey\}
番組をリストから削除
rm $TMPFILE
テンポラリファイルを消す。お掃除
← HD-HGLAN 1.51 beta + USB HUB + MV7DX/U2 |
ハックの記録 LinkStation/玄箱 をハックしよう |
→ PC-MV7DX/U2 新ドライバ?? |