sed和awk中使用shell变量

转载自 jrckkyy
最终编辑 zengzhaonong

sed和awk中使用shell变量
----------------------------------------------
x=MM
sed 's/AB/'$x'/g' b.c

sed 's/AB/'"$x"'/g' b.c
sed 's/'"$val"'//' urfile


最近做预料处理,使用bash脚本,需要在脚本的sed和awk使用shell变量以控制循环,出现一些问题后找到解决办法如下:
1.sed使用shell变量
 这个比较好办,sed命令中可以用单引号和双引号,一般我们习惯用单引号,如下:
 sed -i 's/pattern1/pattern2/g' inputfile
 如果要使用shell变量,就需要使用双引号
pattern1=XXX
pattern2=XXX
sed -i "s/$pattern1/$pattern2/g" inputfile

2. awk使用shell变量
有很多种方法,最简单的一种记录如下:
line=XXX
awk '$1=="'$line'"{print $0}' inputfile
注意的是,awk命令本身需要将模式和动作部分用单引号引用,所以里面引用shell变量是双引号+单引号,双引号是保证正确处理变量值的空格,放大一下:
"'$line'"
另外:
awk '$1="win"{$"'$curcls'"=$"'$curcls'"+1;print $0}' nwf
则是另一种间接引用模式,因为通常shell的间接引用是使用
eval echo /$$var
更高级的
a=10
b=a
c=${!b}

则c=10

 

 

 

 

 
sed中使用变量,而变量中有特殊字符的情况?
----------------------------------------------
a=helloWWW
b=xxx
echo $a | sed "s/WWW/$b/"
输出:helloxxx 没有问题

但下面:
a='${asdf}/bin/ok'
b='/one/two'
echo $a | sed "s/${.*}/$b/"
bash: s/${.*}/$b/: bad substitution

如果是:
echo $a | sed 's/${.*}/AAA/'
AAA/bin/ok 也没有问题。

请解释一下上面的原因,并给出解决办法?

感觉是因为 $b中包含了路径符号"/" 的原因。如何解决呢?

echo $a | sed "s#${.*}#$b#"

 


sed支持反向匹配
----------------------------------------------
sed -n '/bsp/!p' file
匹配不包含bsp的行




sed的运行结果怎么给变量赋值
----------------------------------------------
var=$(sed ...)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值