2016-09-14 67 views
0

我必須將某些頁面移動到另一個主機,但數據庫IP被拆分。 所以我要做找到用戶名的值,並替換兩行的IP找到值,但通過bash替換另一行另一行

我這個嘗試了上面:

#!/bin/bash 

OUTPUT="$(find /home/user/files/script/test-file -maxdepth 1 -iname file_with_many_sqlconnections.php -exec grep -Hina -B 2 u1_3347 {} \; | grep 172)" 

echo "${OUTPUT}" 

LINE="$(echo "$OUTPUT" | cut -d"-" -f3)" 
echo "${LINE}" 

FILE="$(echo "$OUTPUT" | cut -d"-" -f1,2)" 

echo "${FILE}" 

CONTENT="$(echo "$OUTPUT" | cut -d"-" -f4 | cut -d"." -f4 | cut -d "\"" -f1)" 

echo "${CONTENT}" 

gawk -v line="$LINE" -v content="$CONTENT" -v file="$FILE" -i inplace "NR=="line"{gsub("content", 177)}1" "$FILE" 

我的變量,quotevariants反之亦然幾種組合試了一下。 我也試過sedperl,但是我得到了垃圾作爲輸出,在EOF之後出現換行符,或者gawk忽略換行符,並嘗試將所有內容填充到一個命令中。

我使用echo段只用於查看如果結果的結果是好的,並且正如我在shell中看到它,它「顯示」它很好。

問題

$db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


    $db = mysql_connect("172.1.1.178", 
    "u1_3347","pass7"); 


    $db = mysql_connect("172.1.1.178", 
    "u1_3347","pass7"); 


    $db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


    $db = mysql_connect("172.1.1.178", 
    "u1_3347","pass7"); 

應該是:

$db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


$db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 


$db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 


$db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


$db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 


$db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 

問題

$db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


    $db = mysql_connect("172.1.1.178", 
    "u1_3347","pass7"); 
+6

請添加示例i/p和正確的預期輸出/ – Inian

+1

爲什麼標記爲'perl'? –

+0

我把它放到了pastebin,因爲我在這裏得到了一個格式化的消息 http://pastebin.com/62XG4jkw 我也試過用perl,所以這是一個錯誤,對不起 – Avalun

回答

0

你的樣品輸入工作(即跳過讀文件等):

perl -0777 -pe "s/(\$db = mysql_connect\()\"\d+\.\d+\.\d+\.\d+(\",\s*\n)\s*(\"u1_3347\")/ \1\"172.1.1.180\2 \3/g" 

詳情:

  • 使用-0777完全吃輸入,
    允許模式,以跨換行符
  • -pe匹配默認遍歷輸入和打印結果
  • 看的幾乎任何IP地址,
    嵌入所需輸入線路的特徵其他部分
  • 特別尋找需要IP更改的用戶
  • 從空格,捕捉組和新的IP
  • 到處g

輸出組裝新outputlines(如需要的話,除了空白修補和僅具有您的樣品輸入的五個條目):

$db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


    $db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 


    $db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7"); 


    $db = mysql_connect("172.1.1.178", 
    "u2_3456","pass6"); 


    $db = mysql_connect("172.1.1.180", 
    "u1_3347","pass7");