2014-11-14 108 views
1

的sed在我的tcsh腳本我有這個TCSH Shell腳本:替換變量使用內部文件

sed -i "s/^${y}$//g" $x 

我如何得到這個工作?要麼我沒有改變,要麼像非法變量名稱或變量名稱一樣必須包含字母數字字符。嘗試了「」的不同組合。 ''在sed中。示例

sed 's/^'"${y}"'$//g' $x 

回答

2

在雙引號字符串中擴展變量名稱在tcsh中很棘手。在您的命令:

sed -i "s/^${y}$//g" $x 

外殼或環境變量$y的價值應該被正確地擴大,但外殼會盡量擴大$/$/值,它作爲錯誤信息說是非法的變量名。

你的第二個命令:

sed 's/^'"${y}"'$//g' $x 

幾乎正確;它只是缺少-i參數sed

這應該工作: 。 SED的/ ^「 」$ {Y}「 '$ // G' $ X

{}周圍y不需要在這種情況下,所以你可以寫:

sed 's/^'"${y}"'$//g' $x 

或者你也可以做這樣的:從雙引號單引號

sed -i "s/^$y"'$'"//g" $x 

這最後一個版本開關和回雙,只是圍繞$字符。這是一個值得強調的問題,無論您是僅使用您不希望展開的$附近的單引號,還是僅使用您希望展開的$y左右的雙引號。

更簡單地說,你可以通過\它前面逃避雙引號字符串$字符(我認爲這可能是特定於TCSH;原CSH可能沒有能夠做到這一點)。所以我覺得這是首選的方法 - 假設你有tcsh的,而不是老式的CSH:

sed -i "s/^$y\$//g" $x 

我假設你想要做的是更新通過$x在地方命名的文件,刪除包含在每行開頭的$y中的字符串。這似乎是你想要做的,但我不能確定。