sed使用变量,替换掉第一行。

本文讨论了在shell脚本中使用sed替换包含路径的特定行时遇到的语法错误,并提供了修正方法。通过使用双引号而非单引号,并在替换字符串中使用其他符号替代路径分隔符,可以避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


需求

(1)想替换掉某个文件的第一行。

(2)替换为一个路径

(3)被替换的这行,也是很多/构成的路径。


因此很多错误:


zhangbin@Ubuntu64:~/codeStore/testReplaceOneLine$ source replacePrefix.sh
prefix=/home/zhangbin/codeStore/testReplaceOneLine/pkgconfig
sed: -e expression #1, char 15: unknown option to `s'
zhangbin@Ubuntu64:~/codeStore/testReplaceOneLine$ source replacePrefix.sh
prefix=/home/zhangbin/codeStore/testReplaceOneLine/pkgconfig
zhangbin@Ubuntu64:~/codeStore/testReplaceOneLine$ 


经常引起不认识指令参数等语法错误。


 #!/bin/sh
cd pkgconfig
CURRENT_ROOT=`pwd`
PREFIX_TAG="prefix="
FFMPEG_LIB_TAG="$PREFIX_TAG$CURRENT_ROOT"
echo $FFMPEG_LIB_TAG

#sed -i '/"$PREFIX_TAG"/d' libavcodec.pc
#sed -i '1s/.*/'echo $FFMPEG_LIB_TAG'/' libavcodec.pc

sed -i "1s@.*@$FFMPEG_LIB_TAG@" libavcodec.pc
cd ..


==================================================

搜索了下,

参考http://www.linuxsir.org/bbs/thread366737.html    特别是这个。

http://blog.youkuaiyun.com/linwhwylb/article/details/7184748

 

注意最外层有单引号,'s/xxxx/xxx/'。
为了达到你的目的,应当使用双引号,这样里面的变量才能够替换。
[php]sed -i "s/ORACLE_HOME_PATH/$val/g" a.sql x.sql c.sql v.sql b.sql n.sq[/php]
又,你的替换字符串中含有 / 符号,所以我建议使用其他符号来分割sed的命令:
[php]
sed 's@xxxxx@xxxx@'
sed -i "s@ORACLE_HOME_PATH@$val@g" a.sql x.sql c.sql v.sql b.sql n.sq
[/php]
这样,PATH里面的斜线符就不需要转义了,阅读起来也更舒服了。


=============参考==============

http://findingcc.blog.51cto.com/1045158/234458

   我们在编写shell脚本的时候,经常会遇到在脚本中使用awk或sed去调用shell环境中的变量的时候,下面我简单的说一下调用的方法。
      sed一般使用单引号,sed引用shell变量时使用双引号即可,因为双引号是弱转义,不会去除$的变量表示功能,而单引号为强转义,会把$作为一般符号表示,所以不会表示为变量。
       awk在调用shell变量时,需要使用参数-v,举例说明:
awk  -v a=$second -v b=$count '$2==a{sum += $1};END {print sum/b}'  filename
       其中$second、和$count为shell中变量,可以看出,每调用一次变量都要加一个-v参数,后面使用shell变量的时候,就不用加$了,直接是a和b就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值