2017-05-01 51 views
0

這是正在由sed的編輯的文件:需要驗證我如何SED正在編輯這個文件理解

# cat flyway.conf.j2 
flyway.url=jdbc:postgresql://{{ DB_HOST }}:5432/{{ DB_NAME }}?currentSchema=fm_fmp 
flyway.user={{ FLYWAY_USER }} 
flyway.password={{ FLYWAY_PASSWORD }} 

這是代碼片段和評論是我的代碼的理解,是我的理解正確,還有## * /獲取目錄的基本名稱:

# To get the last dir in current working directory, and if you want to do it completely within a bash script without running any external binaries 
SCHEMA=${PWD##*/}  
#sed -i means inplace, alnum means alphanumeric, 1s (Only search and replace 1st line) searching for string =any_alpha_numeric then _ then {}, 
    # then *$ meaning to the end and replace with value of variable $SCHEMA 
    sed -i "1s/=[[:alnum:]_{} ]*$/=${SCHEMA}/" flyway.conf.j2 
+0

正則表達式期望在'='和行尾之間的任何序列中包含字母數字,'_','{'和'}'。由於':',這不會修改輸入文件的第1行。如果該表達式應用於第2行或第3行,則它將起作用。 – alvits

回答

0

${PWD##*/}是bash變量擴展的一部分。通常

$ {var ## Pattern}從$ var中刪除與$ var的前端相匹配的$ Pattern的最長部分。

因此,它會導致當前工作目錄減去以/結尾的第一部分。
[[:alnum:]_{} ]*是「任意數量的數字,空格,下劃線或花括號」的正則表達式。
$需要正則表達式才能結束,並且必須以=開頭。

+0

謝謝,這很有幫助,因爲我們針對不同的模式有不同的目錄,所以我們只在第一行之後進行替換。 –

+0

當然是的。你甚至在問題中已經正確地解釋了你自己。我的錯。謝謝你讓我知道。 – Yunnosch

相關問題