簡體   English   中英

sed 錯誤“sed:不匹配的‘/’”

[英]Sed error "sed: unmatched '/'"

我有一個包含以下格式數據的文件:

{"parameter":"toto.tata.titi", "value":"0/2", "notif":"1"}

我使用 sed 對文件進行了更改:

sed -i "/\<$param\>/s/.*/$line/" myfile

哪個line變量是

{"parameter":"toto.tata.titi", "value":"0/2", "notif":"3"}

param變量是toto.tata.titi

上面的sed命令返回錯誤:

sed: unmatched '/'

因為line變量包含/ ==> "0/2"

即使line變量包含/如何更新我的 sed 命令以使其工作?

您的$param$line可能包含 / 導致sed出現語法錯誤。 考慮使用其他分隔符,如| @

例子:

sed -i "/\<$param\>/s|.*|$line|" myfile

但這可能還不夠。 您還可以在斜線展開時引用斜線:

sed -i "/\<${param//\//\\/}\>/s|.*|$line|" myfile

也可以使用其他更安全的字符:

d=$'\xFF'  ## Or d=$(printf '\xFF') which is compatible in many shells.
sed -i "/\<${param//\//\\/}\>/s${d}.*${d}${line}${d}" myfile

檢查您的$param$line變量是否有\\n (換行符),在我的情況下,這就是錯誤的原因。

當我在 ansible 任務中使用 sed -i.bak 's/\\r$//' 命令時,我遇到了同樣的錯誤。 我通過簡單地轉義“\\r”中的“\\”來解決它。 我將命令更改為sed -i.bak 's/\\\\r$//'

這將穩健地僅在包含字符串(不是正則表達式) toto.tata.titi

awk -v param="$param" -v line="$line" 'index($0,param){$0 = line} 1' file

並且不受paramline除反斜杠以外的任何字符的影響。 如果您需要能夠按原樣處理反斜杠,只需將 shell 變量移動到文件名列表中,並在 BEGIN 部​​分中從它們填充 awk 變量,而不是通過-v賦值:

awk 'BEGIN{param=ARGV[1]; line=ARGV[2]; ARGV[1]=ARGV[2]=""} index($0,param){$0 = line} 1' "$param" "$line" file

暫無
暫無

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

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