簡體   English   中英

如何使用sed或awk命令使用變量(包含Unix腳本的變量)查找和替換文本

[英]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.

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