簡體   English   中英

s命令的正確語法以及sed中的尋址

[英]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中代表“最后一行”的一個。

你必須結合這些

  1. Shell認為sed的$與參數無關
  2. Shell參數仍會擴展(不能在單引號內)
  3. 整個sed命令都用引號引起來。

一種可能性是

sed "$beginning,\$s/pattern/$variable/" file

整個命令用雙引號引起來,即參數被擴展( $beginning$variable )。 為了確保外殼程序不嘗試擴展不存在的$s ,對“行尾” $進行了轉義,因此外殼程序不會嘗試任何有趣的事情。

其他選項是

無效的方法

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.

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