簡體   English   中英

Shell腳本,用於替換文件夾中所有文件中的令牌

[英]shell scripting for token replacement in all files in a folder

我對Linux Shell腳本不是很好,我正在嘗試按照Shell腳本來替換

指定目錄下所有html文件中的修訂號令牌$rev -<rev number>

cd /home/myapp/test
set repUpRev = "`svnversion`"
echo $repUpRev
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'

這似乎不起作用,上述代碼有什么問題?

rev=$(svnversion)
sed -i.bak "s/$rev/some other string/g" *.html

regexp字符串中的$ rev是什么? 它是另一個變量嗎? 或者,您正在尋找字符串'$ rev'。 如果是后者-我建議在$之前添加“ \\”,否則將被視為特殊的正則表達式字符...

這是顯示最后一行的方式:

grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'

如果您顯示一些輸入數據,將會有所幫助。

-r選項使grep遞歸。 這意味着它會在目錄及其子目錄中的文件進行操作。 那是你打算的嗎?

grepsed的點代表任何字符。 如果需要文字點,則需要對其進行轉義。

grepsed命令中最后一個轉義的美元符號將被視為文字美元符號。 如果要錨定到行尾,則應刪除轉義符。

.*僅作為sed s命令右側的文字字符串。 如果要包括左側匹配的內容,則需要使用捕獲組。 僅當模式在一行中出現多次時,才需要s命令上的g修飾符。

使用引號,取消引用,引用,取消引用很難閱讀。 使用雙引號允許變量擴展。

單獨嘗試不帶xargssedgrep命令,以查看它是否正在生成文件列表。

這可能更接近您想要的:

grep -lr -e "\$rev -.$repUpRev.$" *.html | xargs sed -i "s/\$rev -.$repUpRev.$/\$rev -REPLACEMENT_TEXT/g"

但您仍然需要確定g修飾符,點,最后的美元符號等是否符合您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM