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 回答