2016-09-14 12 views
0

私は別のホストにいくつかのページを移動する必要がありますが、dbのIPは分割されています。私は、変数、quotevariantsおよびその逆のいくつかの組み合わせでそれを試してみました値を見つけて別の行の別の行を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" 

: は、だから私は、ユーザー名の値を見つけるのですかとIP

上記の2行を交換する必要があり、私はこれでそれを試してみました。 sedperlも試してみましたが、出力としてガベージがあり、EOFの後で改行が発生するか、またはgawkが改行を無視して、すべてのコマンドを1つのコマンドで処理しようとします。

echoセグメントは、結果の結果が問題ない場合にのみ表示され、シェルに表示されているように表示されます。

問題

$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

私はここで書式設定しているので、ペーストビンに入れます 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、完全に入力を食べるために
    パターンはかなり任意のIPアドレスに対して
  • 見デフォルトで入力し、印刷結果をループするために改行
  • -pe間で一致することができます 、
    所望の入力ラインの特徴的な他の部分に埋め込まれている
  • IPを必要とする特定のユーザを探す
  • 新しい空白からoutputlines、キャプチャグループと新しいIP
  • どこでもg

出力(必要に応じて、離れて空白の工夫から、あなたのサンプル入力の唯一の5つのエントリを持つ)組み立て:

$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"); 
関連する問題