使用 cat 指令將 $ 替換為 £

使用 cat 指令將 $ 替換為 £

我有帶有一些美元符號 ( ) 的文件 test_output_archive.svd $。我使用 cat 命令生成了一個 shell 腳本 Replace_dollar_pound.sh,以將美元符號替換為英鎊 ( £) 腳本在 Solaris 10 上運行,美元按預期被替換。在 Solaris 11 中,但美元沒有被替換,也沒有拋出任何錯誤

test_output_archive.svd 的內容: 線路租金 9 美元 OOB 僅售 10 美元

在第 1 步將美元符號替換為英鎊,在第 2 步刪除垃圾字符,在第 3 步刪除臨時文件,在第 4 步重命名**

Replace_dollar_pound.sh 的內容: 貓測試輸出存檔.svd | tr "\044" "\243" > temp_archive.svd cat temp_archive.svd | tr "\044" "\243" > temp_archive.svd tr -d "\302" > test_output_archive2.svd rm temp_archive.svd mv test_output_archive2.svd test_output_archive.svd

當作業系統更新到 Solaris 11 時需要進行任何修改嗎?

答案1

在正規表示式中具有$特殊意義,它的意思是「記錄的結尾」(大多數情況下是record==line)。所以,你需要逃避它。嘗試這個:

sed 's/\$/£/g' file > outfile

答案2

您可以在 sed 指令中轉義特殊字元 ($)。

$ cat test.txt
£ pound £
$ dollar $
£ pound £
$ dollar $

$ sed 's/\$/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £

或者也可以

$ sed 's/[$]/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £

答案3

您可以sed按照描述來替換每次出現的字串這裡:

sed -i 's/\£/\$/g' FILENAME

-i選項告訴sed對檔案進行操作,s是替換字串的運算符,是您需要替換的字串,\$是替換每個字元的字串$\轉義符號,因為它們是特殊字元),g意味著替換每個實例。

編輯:-i選項在 Solaris 上不起作用,您應該使用解決方法。

相關內容