( sed 指令)-> sed $foo

( sed 指令)-> sed $foo

我正在編寫一個腳本,該腳本使用 sed 命令來替換文件中的特定標識符。目前該腳本已對 sed 指令進行硬編碼

目前方法:

s*ed 's/@Number@/ '  "${Number}" '/g; s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g' File_Template > index.html*

由於 sed 命令將不再被硬編碼,並且我們正在運行許多具有不同 sed 要求的進程,我想做這樣的事情

目標:

INITIALIZE_SED_COMMAND='s/@Number@/ ' "${Number}" '/g;
        s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g;'
# Some logic happens here
INITIALIZE_SED_COMMAND="$INITIALIZE_SED_COMMAND File_Template > index.html"  ;

sed $INITIALIZE_SED_COMMAND

這可以作為腳本在 Linux 平台上運行,.sh但我需要在 .ksh unix我一直無法解析。

錯誤:

sed:無法找到或開啟檔案 s/@Number@/npdsfg/g;。

sed:無法找到或開啟檔案 s/@Value@/SQR。

sed:無法找到或開啟檔案#s/@Socket/semi_/g;。

答案1

這不是從基於 Linux 的系統遷移到某些非基於 Linux 的系統(也許是 AIX?)的結果。這是對 shell 如何解析和執行命令的根本誤解。

您不能編寫此程式碼並期望它將時間戳寫入檔案:

v="date > /tmp/date.txt"
$v

同樣,您不能編寫此程式碼並讓它執行替換並將結果寫入輸出文件

v="s/abc/XYZ/ /tmp/source > /tmp/destination"
sed $v

不能在變數內指定檔案重定向。

我認為您正在尋找的是sed -f,您可以在其中建立替換檔案並將它們應用於來源資料檔案:

#!/bin/ksh
# Usage: thisprogram  <transform_file>  <src_file>  <dst_file>
#
transform="$1"
src="$1"
dst="$2"

sed -f "$transform" "$src" >"$dst"

轉換檔案可能包含以下操作:

s/@Number@/1234/g
s/@Value@/somevalue/g
s/@Socket@/99b44/g

顯然,您必須在特定執行的上下文中準備此內容。

透過您的問題的更多詳細信息,可能可以進一步採用此解決方案,但我相信您在這裡有足夠的資訊來針對您的特定用例重新設計它。

相關內容