[英]How to find and replace text with variable (variable holds Unix scripts) using sed or awk command
目標:我想用具有Unix代碼的文件內容替換字符串。
我想做的是:
第一:我將文件內容存儲到變量中
variable=`cat sample.sh`
variable2="$(sed -z 's:\n:\\\n:g;$s:\\\n$::'<<<"$variable")"
然后在sed命令中使用該變量將文本替換為變量值。
sed -i "s:SearchString:$variable2//&/\\\&}:g"<<<"SearchString" File.html
sed命令引發錯誤,指出
sed:-e表達式#,字符5:s'的未知選項
請幫助實現我的目標。
問題可能是您在$ variable2中有一個冒號,並且終止了替換值。 您是否知道$ variable2中不會包含某個字符? 例如,“管道”字符“ |” -如果有的話,請在此處使用該字符而不是“:”來分隔“ s”命令的各個部分。
我認為這是一個錯字,但是您在sed命令的“ $ {variable2”中缺少左花括號。
還有其他方法可以解決您的問題,但這是最小的更改。
@GulamJeelani您使用的是錯誤的工具。 sed用於s / old / new, 僅此而已 。 請參閱是否可以可靠地與SED逃脫正則表達式的元字符對於一些你要面對試圖迫使SED做這個工作或其他任何東西比S /老/新的更復雜的問題。 只需使用awk:
awk '
BEGIN { old = "SearchString" }
NR==FNR { new = (FNR>1 ? new ORS : "") $0; next }
s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
{ print }
' sample.sh File.html
上面的代碼當然未經測試,因為您沒有提供我們可以測試的示例輸入/輸出,但是很明顯它在做什么以及在必要時如何對其進行調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.