[英]proper syntax for the s command along to the addressing in sed
我想從bash腳本發出此命令
sed -e $beginning,$s/pattern/$variable/ file
但任何可能的引號組合都會給我一個錯誤,只有一個可行:
sed -e "$beginning,$"'s/pattern/$variable/' file
同樣不好,因為它沒有取消引用變量。
我的方法可以用sed實現嗎?
隨意切換報價。 外殼可以使物體保持直立。
sed -e "$beginning"',$s/pattern/'"$variable"'/' file
您可以嘗試以下方法:
$ sed -e "$beginning,$ s/pattern/$variable/" file
file.txt:
one
two
three
嘗試:
$ beginning=1
$ variable=ONE
$ sed -e "$beginning,$ s/one/$variable/" file.txt
輸出:
ONE
two
three
有兩種類型的報價:
單引號保留其內容( >
是提示):
> var=blah > echo '$var' $var
雙引號允許參數擴展:
> var=blah > echo "$var" blah
和兩種$
符號:
你必須結合這些
$
與參數無關 一種可能性是
sed "$beginning,\$s/pattern/$variable/" file
整個命令用雙引號引起來,即參數被擴展( $beginning
和$variable
)。 為了確保外殼程序不嘗試擴展不存在的$s
,對“行尾” $
進行了轉義,因此外殼程序不會嘗試任何有趣的事情。
其他選項是
$
和s
之間加一個空格(請參閱Ren的答案 ) sed '$beginning,$s/pattern/$variable/' file
一切都用單引號引起來:shell參數不會擴展(不遵循上面的規則2)。 $beginning
不是有效的地址, pattern
實際上將由$variable
代替。
sed "$beginning,$s/pattern/$variable/" file
一切都在double qoutes中:參數被擴展,包括$s
,這是不應該的(不遵循上面的規則1)。
以下形式從腳本中為我工作
sed $beg,$ -e s/pattern/$variable/ file
如果從外殼執行相同的形式也將起作用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.