我想建立一個bash(或其他)腳本,當運行時將搜索它自己的目錄(遞歸地)爲具有html擴展名的文件,並更改他們將特定標籤與其他(特定)文件中的內容之間的所有代碼。Bash腳本從字符串指定的點插入文件中的數據
我這樣做,因爲我需要跨但它在將要照顧,後來每一個微小變化的所有頁面導航,所以這個腳本會幫助我剛剛得到的第一個基地,所以我可以改變其餘的。
我特別想用腳本在本地執行此操作,而不是用html或php代碼替換它。
我想建立一個bash(或其他)腳本,當運行時將搜索它自己的目錄(遞歸地)爲具有html擴展名的文件,並更改他們將特定標籤與其他(特定)文件中的內容之間的所有代碼。Bash腳本從字符串指定的點插入文件中的數據
我這樣做,因爲我需要跨但它在將要照顧,後來每一個微小變化的所有頁面導航,所以這個腳本會幫助我剛剛得到的第一個基地,所以我可以改變其餘的。
我特別想用腳本在本地執行此操作,而不是用html或php代碼替換它。
基於本格雷厄姆給予的巨大幫助,以及更多的研究,這裏是我所尋找的答案。
您需要一個文件作爲腳本(replace.sh
),另一個作爲替換(replacementFile
)以及任何其他數量的將替換應用於它們的文件。
腳本。 replace.sh
#!/bin/bash
find . -name "*.html" | while read FILE; do
sed -i '' '/{{endSTRING}}/r replacementFile
/{{startSTRING}}/,/{{endSTRING}}/d' ${FILE}
done
就是這樣。雖然有一些額外的點。 replacementFile
最後應該有一個空行,否則它將連接到更改文件上的下一行。 -i ''
是否提供無備份;如果你想要它們,只需在引號之間放置一些東西,它就會將原始文件與你選擇的任何東西一起復制。
這應該讓你開始。它會直接編輯這些文件,因此請備份或暫時刪除--in-place
開關。創建以下四個文件:
replace.sh:
#!/bin/bash
find -name '*.html' | while read FILE; do
sed --in-place -f replace.sed "$FILE"
done
replace.sed:
/{{NAV}}/{
r replacement
d
}
更換:
<ul>
<li>Here</li>
<li>There</li>
</ul>
file.html
<html>
<head></head>
<body>
<nav>
{{NAV}}
</nav>
<h1>Welcome to Whatever!</h1>
</body>
讓replace.sh
可執行文件(chmod a+x replace.sh
)。通過運行replace.sh
和檢查的file.html
$ ./replace.sh && cat file.html
<html>
<head></head>
<body>
<nav>
<ul>
<li>Here</li>
<li>There</li>
</ul>
</nav>
<h1>Welcome to Whatever!</h1>
</body>
重要的是,佔位符{{NAV}}
是在自己的行,因爲sed腳本會抹殺該行的內容的內容進行測試。如果「{{NAV}}」出於某種原因可能出現在您的文件中,則應更改佔位符。
試圖編輯你的* find *命令來包含要搜索的目錄爲「。」(OSX給我一個錯誤,它不存在),但是「編輯至少需要六個字符」。 – user137369
它似乎工作得很好,這幾乎是我想要的,只是一個細節缺失。如何編輯* replace.sed *,以便替換兩個字符串之間的文本?比如說,在{{startNAV}}和{{endNAV}}之間。 – user137369
您可以用'/.* {{startNAV}}。* {{endNAV}}。* /'替換replace.sed的正則表達式部分。但是這仍然會刪除整行。我假設你是否在你的文件中插入佔位符,那麼讓他們在自己的路線上是沒有問題的。如果您不使用佔位符,並且不打算使用已存在於文件中的HTML標記交換正則表達式中的「{{startNAV}}」,這不是一個好主意。請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
使用某種服務器端包含。比你想要做的更容易和更可預測。 – Brad
導航**將**在每個頁面上進行較小的更改,並且會在本地查看這些文件。任何類型的解決方法,只是包括在那裏的文件是不行的。 – user137369
服務器上的小改動是沒有問題的,但是是的,如果要在本地查看這些更改是非常有意義的,那麼它們一定很好。我可以建議編寫一個腳本來準備好這些文件嗎?正則表達式不能真正可靠地處理HTML(儘管它可能適用於特定的情況),這是一個難題。你至少可以使用標識插入點的自定義標籤嗎?也許HTML註釋'<! - insert here'或者其他東西 – Brad