2013-09-16 60 views
1

我想修改IP在兩個文件中更改IP:文件1擊菜單一個答案,在多個文件中

內容有這一行:的

AS400=127.0.0.1 

目錄文件2有這line:

AS400=127.0.0.1 

下面的bash腳本會問我AS400的IP地址,此時只修改一個文件:

#!/bin/bash 
    # Modify props file - file1.props 
echo " Please answer the following question"  
gawk -F"=" 'BEGIN{ 
    printf "Enter AS400 IP: " 
    getline as400 <"-" 
    file="/usr/local/src/file1.props" 
    } 
    /as400/ {$0="as400="as400} 
    { 
    print $0 > "temp2" 
    } 
    END{ 
    cmd="mv temp2 "file 
    system(cmd) 
    } 
    ' /usr/local/src/file1.props 

我怎麼告訴它來更新我到文件2還可以鍵入完全相同的IP地址?

獎金問題... 任何人都可以看看這個腳本,並告訴我爲什麼獲得編輯的文件以每行結尾的^ M結尾?

+0

如果輸入文件具有DOS回車,它們將被複制到輸出文件;你有什麼可刪除它們(也沒什麼添加它們,除非你複製/粘貼不完全的腳本)。 – tripleee

回答

2

而是包裹的awk,使用臨時文件並調用mvsystem(),你可以只使用bash作爲一個整體:

#!/bin/bash 

[[ BASH_VERSINFO -ge 4 ]] || { 
    echo "You need bash version 4.0 to run this script." 
    exit 1 
} 

read -p "Enter AS400 IP: " IP 

FILES=("/usr/local/src/file1.props" "/usr/local/src/file2.props") 

for F in "${FILES[@]}"; do 
    if [[ -f $F ]]; then 
     readarray -t LINES < "$F" 
     for I in "${!LINES[@]}"; do 
      [[ ${LINES[I]} == 'as400='* ]] && LINES[I]="as400=${IP}" 
     done 
     printf "%s\n" "${LINES[@]}" > "$F" 
    else 
     echo "File does not exist: $F" 
    fi 
done 

它保存到一個腳本並運行bash script.sh

你也可以修改它來接受文件的自定義列表來代替。替換該行

FILES=("/usr/local/src/file1.props" "/usr/local/src/file2.props") 

隨着

FILES=("[email protected]") 

然後運行使用類似的腳本:

bash script.sh "/usr/local/src/file1.props" "/usr/local/src/file2.props" 
+0

這正是我正在尋找的。謝謝。 – alycalhoun

0

事實上,腳本可以做了很多更簡單,更優雅的和可用的,如果你廢除了交互提示,並用命令行參數來代替。

#!/bin/sh 
case $# in 
    1) ;; 
    *) echo Usage: $0 '<ip>' >&2; exit 1;; 
esac 

for f in file1.props file2.props; do 
    sed -i 's/.*as400.*'/"as400=$1"/ /usr/local/src/"$f" 
done 

如果您sed不支持-i選項,回落到你在原來的劇本有臨時文件迴旋。

+0

這也將工作 - 但需要交互部分,因爲我需要這個融入我的外部客戶首次啓動腳本,以便他們可以在自己的IP地址輸入。 – alycalhoun

0
#!/bin/bash 
read -p "Enter AS400 IP: " ip 
sed -i '' "s/\(^as400=\)\(.*\)/\1$ip/" file1 file2 

至於你的獎金,看看這個:'^M' character at end of lines

+0

我試圖執行此,但它無法找到文件。我曾嘗試更改sed行的格式以指向特定的位置 - 但仍然沒有結束。 – alycalhoun

+0

也許你「具體位置」不夠具體? '/ usr/local/src/file [12] .props'應該在其他地方工作。 – tripleee

+0

您究竟執行了什麼? – aktivb