使用 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 上不起作用,您应该使用解决方法。

相关内容