2016-08-26 69 views
0

我有兩個文件main.css和main_custom.css。我想在關鍵字的幫助下在main.css中找到合適的位置,並在標識的位置插入main_custom.css的內容。我正在嘗試使用shell腳本來達到這個目的。每個文件的代碼如下所示。Shellscript不讀取結束大括號

的main.css

[SOME_STUFF] 
/* 
========================================================================== 
    Author's custom styles 
========================================================================== 
*/ 
[SOME_MORE_STUFF] 

main_custom.css

body { 
    padding-top: 50px; 
    padding-bottom: 20px; 
} 

script.sh

# Merge custom CSS into master CSS file 
LINE_NO=0 
while read LINE 
do 
    ((LINE_NO++)) 
    if [[ $LINE == *"Author"* ]] 
    then 
     read LINE 
     ((LINE_NO++)) 
     if [[ $LINE == *"=="* ]] 
     then 
      read LINE 
      ((LINE_NO++)) 
      break 
     fi 
    fi 
done <"main.css" 

# Merge custom CSS into master CSS file 
while IFS= read -r CUSTOM_LINE 
do 
    sed -i -e "$LINE_NO i $CUSTOM_LINE" "main.css" 
    ((LINE_NO++)) 
done <"main_custom.css" 

生成的文件看起來是這樣的 -

的main.css

[SOME_STUFF] 
/* 
========================================================================== 
    Author's custom styles 
    ========================================================================== 
*/ 
body { 
padding-top: 50px; 
padding-bottom: 20px; 
[SOME_MORE_STUFF]  

現在,當我執行腳本,腳本會將前三行main_custom的.css文件,但不是用大括號括起來的文件。另外,我也在失去格式化。我究竟做錯了什麼?

+0

請執行文件都有一個結尾的新行? – Eris

+0

@Eris - main_custom.css沒有尾隨換行符。但是,如果我補充一點,'sed'在'a','c'或'i''後面抱怨錯誤信息'sed:-e expression#1,char 6:expected \'。 –

回答

1

這裏是一個sed oneliner替代腳本 - 右括號必須是一個換行符

sed '/Author\x27s custom styles/{n; rmain_custom.css 
}' 

輸出採樣輸入

[SOME_STUFF] 
/* 
========================================================================== 
    Author's custom styles 
========================================================================== 
body { 
    padding-top: 50px; 
    padding-bottom: 20px; 
} 
*/ 
[SOME_MORE_STUFF]