2016-09-14 2 views
0

일부 페이지를 다른 호스트로 이동해야하지만 db 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 및 여러 조합을 시도 : 그래서 나는 이름의 값을 찾을 수 있습니까 내가이 그것을 시도 IP

위의 두 라인을 교체해야합니다. 또한 sedperl을 시도했지만 출력으로 쓰레기가 발생하거나 EOF 이후에 줄 바꿈 문제가 발생하거나 gawk은 줄 바꿈을 무시하고 모든 명령을 처리하려고 시도합니다.

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

여기에 formattingussue를 붙여서 붙여 넣기했습니다. 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를 필요로하는 사용자를 특별히 찾아보십시오
  • 공백 캡처 그룹과 새로운 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");