Chinaunix

标题: sed怎样处理变量里面含有&符合 [打印本页]

作者: 代号:军刀    时间: 2013-12-12 18:27
标题: sed怎样处理变量里面含有&符合
  1. [root@ ~]$ echo $a
  2. 134&1234
  3. [root@ ~]$ echo abcd | sed "s/a/$a/"
  4. 134a1234bcd
  5. 怎样处理&这个符号
复制代码

作者: chn475111    时间: 2013-12-12 19:48
a=134\&1234
echo abcd | sed "s/a/$a/"
作者: 代号:军刀    时间: 2013-12-12 20:28
回复 2# chn475111


    不能在变量a中做手脚,这个变量是传进来的,我并不知道,只能在sed中做手脚
作者: reyleon    时间: 2013-12-12 20:28
好神奇,估计只能转义

作者: yinyuemi    时间: 2013-12-12 20:36
回复 1# 代号:军刀


    后面加上 s//\&/g 试试
作者: reyleon    时间: 2013-12-12 20:38
  1. 134&1234bcd
  2. [root@centos ~]# a='134&1234'
  3. [root@centos ~]# echo abcd | sed 's/a/'${a//&/\\&}'/'
  4. 134&1234bcd
  5. [root@centos ~]#
复制代码
这样子行咩? 实在找不着其他的招了
作者: jason680    时间: 2013-12-12 20:41
本帖最后由 jason680 于 2013-12-12 21:03 编辑

回复 1# 代号:军刀

would you like those

# export a="134&1234"

# echo abcd | perl -ape 's/a/$ENV{a}/'
134&1234bcd

---------------------------
# a="134&1234"; a=${a//&/\\&}; echo abcd | sed "s/a/$a/"
134&1234bcd

   
作者: 代号:军刀    时间: 2013-12-13 00:09
@yinyuemi@reyleon@jason680
没劲,这样每个sed每个串我都还得写多s//\&/g这玩意,相当于多了一个判断,判断里面是否有&这个字符
sed -e 子串1 -e 子串2 -e 子串3都得加那个串
作者: yestreenstars    时间: 2013-12-13 09:06
明知sed对&敏感,还用sed,为何不用awk呢?何必钻牛角尖呢?
  1. [root@localhost ~]# echo $a
  2. 134&1234
  3. [root@localhost ~]# echo abcd | awk -va=$a 'BEGIN{FS=OFS=""}{for(i=0;++i<=NF;)if($i~/a/)$i=a}1'
  4. 134&1234bcd
  5. [root@localhost ~]#
复制代码

作者: 代号:军刀    时间: 2013-12-13 10:38
回复 9# yestreenstars


    还不是你之前写的awk的bug引起的,有个php文件print的时候正常,但是print > FILENAME出了问题,输出到新文件只有一部分内容,然后就给中断退出了
    http://bbs.chinaunix.net/thread-4112429-2-1.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2