shell在一個大文件找出想要的一段字符串操作技巧


昨天端午,晚上的時候接了一個電話,我朋友的公司,數據庫被兩個工作沒多久的phper給弄壞了,具體就是把一個字段值,給全表弄成一個了名字了,當然這個是可以配置了禁止全表更新數據庫,這下可急壞了,找到我,叫我給看一下,他們每天3:00是有備份的,按天備份,還好不是增量的,當然binlog日志也是開啟的,我看了一下他們的備份文件是

[root@AY1406121449173218ccZ ~]# ls -lha /www/datebak/2016-06-09.sql
-rw-r--r-- 1 root root 4.9G Jun  9 03:03 /www/datebak/2016-06-09.sql
[root@AY1406121449173218ccZ ~]#

他們整個備份文件有5G,當然恢復的效果有多種,我想了一下,把他們今天這一整天的注冊的用戶給弄出來,也沒有多少就10多個,然后就是想辦法在這5個G的數據中把我需要的表找出來。

[root@AY1406121449173218ccZ datebak]# grep  -n  "ROP TABLE IF EXISTS `activity`" 2016-06-09.sql
-bash: activity: command not found
22:DROP TABLE IF EXISTS `activity`;
67:DROP TABLE IF EXISTS `activity_img`;
93:DROP TABLE IF EXISTS `activity_recommended`;
124:DROP TABLE IF EXISTS `atest`;
149:DROP TABLE IF EXISTS `black_user`;
175:DROP TABLE IF EXISTS `category`;
204:DROP TABLE IF EXISTS `class_grade`;
232:DROP TABLE IF EXISTS `collocate_banner`;
262:DROP TABLE IF EXISTS `course`;
330:DROP TABLE IF EXISTS `edu_account_bind`;
366:DROP TABLE IF EXISTS `function`;
392:DROP TABLE IF EXISTS `head_img`;
418:DROP TABLE IF EXISTS `information`;
455:DROP TABLE IF EXISTS `information_img`;
480:DROP TABLE IF EXISTS `installed_app`;

通過 shell的 grep 這個命令,我們可以找出我們需要的表中的行數

sed -n '5112,5153p' 2016-06-09.sql > tb_user_info.sql

再通過sed 命令將我們找到的行號寫入另一個文件中,這樣,基本就解決了,然后,把我導出來的數據 給導入原來的數據中,然后再將導出的一天的數據給導入,就解決了問題,整個解決問題的時間,沒有超 過1小時,主要是shell 沒有經常用,還查了下資料,當然思路也是最重要的,解決問題,第一個,要有一個清析的思路,把整個過程,好好過幾下,要不然,考濾不全,會造成更多的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM