zoukankan      html  css  js  c++  java
  • sed 替换美元符的问题

    sed 替换美元符的问题
    20121005 Chenxin

    pw=echo $pass_w|sed 's/\$/\\$/g'

    eg:

    !/bin/bash

    i=echo "!@#$%" #i变量中会被赋值一个包含"$"符号的字符
    j=echo $i|sed 's/\$/\\$ /g' #sed的第一个$符号前可以是2个或者是3个转义符,其他不行;第二个$符号前必须是4个转义符;
    #其他情况下,会默认将i变量的结束符给替换成一个$,j变量就变成了“!@#$%$”,最后多了一个$符号;
    echo "$i=$i"
    echo "$j=$j"

    执行后输出:
    $i=!@#$%
    $j=!@#$%

    通过这种方式,就规避了expect中的send命令默认将$pass_w中的"$"后面的部分当做变量来处理,从而造成找不到值的情况;

    备注:
    以上尝试了很多次才成功,至于根本原因,如下:

    原因分析:
    直接在shell环境下,通过 手动输入命令方式执 行:
    echo "123$567" |sed 's/$/$/g'
    便将123$567转换为123$567了;
    但以上情况如果放置 到脚本文件里, 比如t.sh中执行就会被替换成123$567$的情况;
    因为是在双重shell下,$前必须是两层转义,也就变成:
    sed 's/$/\$/g' (标准的写法)
    第一次转义后变成 sed 's/$/$/g',然后在通过一次转义,就达到预期的目的了(sed是发起的一个独立linux进程);
    当send指令执行send 123$567时,其实输入给对端的是 123$567,也就是预期的情况了(tcl的send执行中,跟tcl同样会进行转义操作);
    :)

  • 相关阅读:
    23种设计模式之单例模式
    6大设计原则之里氏替换原则
    6大设计原则之依赖倒置原则
    6大设计原则之接口隔离原则
    6大设计原则之迪米特法则
    Java日志第14天 2020.7.19
    Java日志第15天 2020.7.20
    Java日志第13天 2020.7.18
    Python 语音识别字幕生成器
    python list,tuple,str有序问题
  • 原文地址:https://www.cnblogs.com/chanix/p/12738497.html
Copyright © 2011-2022 走看看