簡體   English   中英

使用sed使用shell腳本替換字符串的特定char

[英]replace specific char of a string using sed using shell script

我必須用一些其他值替換文件的特定行。 例如:我有一個內容如下的文件:

request.timing=0/10 * * * * * ?

現在,我想用動態值替換10(或具體,該位置的任何值)。 例如,如果我想用20替換它,則文件應更新為:

request.timing=0/20 * * * * * ?

有人能幫我嗎? 我使用sed如下:

sed -i "s/request.timing=0\/??/request.timing=0\/$poller"

poller是我們通過的動態值。

首先,你必須檢查變量$poller具有的字符,因為sed可以將其中的任何字符解釋為特殊字符。 檢查sed ,使用不在 $pollersed分隔符。 我們假設我們可以使用/

sed -r 's/(request.timing=0\/)[0-9]{2}/\1'"$poller"'/g'

它是如何工作的

-r選項激活擴展正則表達式,以便您可以使用[0-9]{2} ,並使用( ... )捕獲要在替換站點中使用的字符串。

$ echo 'request.timing=0/10 * * * * * ?' |
sed -r 's:(request.timing=0/)[0-9]+:\1135:'
request.timing=0/135 * * * * * ?

$ poller="135"
$ echo 'request.timing=0/10 * * * * * ?' |
sed -r 's:(request.timing=0/)[0-9]+:\1'"$poller"':'
request.timing=0/135 * * * * * ?

你遇到麻煩的原因是? 在正則表達式中無效。 使用. 代替。 ? 用來說前一個字符可能存在0或1次。

sed -i "s/request.timing=0\/../request.timing=0\/$poller"

(這並不是說其他​​答案不正確!)

暫無
暫無

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

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