0

私はファイルを持っています:

$ cat dd.txt
*************************** 1. row ***************************
            File: log-bin.00005
        Position: 120614936
    Binlog_Do_DB:
Binlog_Ignore_DB:

上記のファイルからこれらの値のみが必要ですlog-bin.000055, 120614936

file,positionここで、スレーブ テーブルを更新したいと思います。

update db.position set binlog_file='log-bin.000055',position='120614936' where master_host='master.tb.com';

簡単なスクリプトを作成するにはどうすればよいですか?

4

2 に答える 2

2

使用GNU Grep前向きな後読み

$ grep -Po "(?<=File: )[^ ]+|(?<=Position: )[0-9]+" dd.txt
log-bin.00005
120614936

# Store file in variable 
$ file=$(grep -Po "(?<=File: )[^ ]+" dd.txt)

# Store position in variable
$ pos=$(grep -Po "(?<=Position: )[0-9]+" dd.txt)

# Generate query using variable and store in variable
$ query="update db.position set binlog_file='"$file"',position='$pos' where master_host='master.tb.com';"

$ echo $query    

update db.position set binlog_file='log-bin.00005',position='120614936' where master_host='master.tb.com';

# Pipe query to mysql
$ echo $query | mysql -u user -ppassword 

スクリプトとして:

#!/bin/bash

file=$(grep -Po "(?<=File: )[^ ]+" dd.txt)
pos=$(grep -Po "(?<=Position: )[0-9]+" dd.txt)

$ query="update db.position set binlog_file='"$file"',position='$pos' where master_host='master.tb.com';"
$ echo $query | mysql -u user -ppassword 
于 2013-01-31T10:28:26.950 に答える
1

指定されたデータを取得するには、次のようにします。

cat dd.txt | egrep "File|Position" | cut -d: -f2
于 2013-01-31T10:14:13.327 に答える