发布网友 发布时间:2022-04-21 11:58
共5个回答
热心网友 时间:2023-11-10 06:14
sed里面需要用变量,要用双引号。
sed命令使用双引号的情况下,可以使用$var(变量)直接引用:
echo | sed "s/^/$RANDOM.rmvb_/g"
13562.rmvb_
sed命令使用单引号的情况下,可以使用'"$var"'引用(单引号,然后双引号,变量):
echo | sed 's/^/'"$RANDOM"'.rmvb_/g'
2442.rmvb_
注意事项
在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子;所以,sed和变量的关键词搜索的结果,众多都写上替换单引号为双引号。
sed命令中使用双引号的情况下,直接`shell command`或者$(shell command)引用命令执行。
echo | sed "s/^/$(date +"%Y%m%d").rmvb_/g"
20130401.rmvb_# 结果
# 使用环境变量$RANDOM以及旧式命令替换的例子:
echo | sed "s/^/`echo $RANDOM`.rmvb_/g"
29484.rmvb_# 结果
热心网友 时间:2023-11-10 06:14
1、首先这边先建一个字母大小转换的脚本test2.sh。
2、sed命令中p能实现打印匹配行的功能,sed -n "1p" test2.sh:带-n选项的话,只打印test2.sh脚本第一行匹配行。sed "1p" test2.sh:不带-n的话,不仅打印第一行匹配行,还打印输出test2.sh脚本的全部内容。
3、sed -n还可以打印文件的范围,比如打印test2.sh脚本的前两行,可以执行以下命令:sed -n "1,2p" test2.sh,就可以直接打印前两行。
4、只有当sed命令传递多个编辑命令式,才会使用到-e。
5、sed a\追加命令,命令格式为:sed ’指定地址a\追加内容‘ 目标文件这个追加内容在匹配行的下一行,只会输出到标准输出,原文件内容是不变的,例如在test2.sh脚本的/tr/所在的匹配行的下一行添加“#hello”内容,可需要执行。
热心网友 时间:2023-11-10 06:14
sed里面需要用变量,就得双引号热心网友 时间:2023-11-10 06:15
命令提示是s命令后面没有结束,看命令应该是变量引用导致的问题
变量引用我改为双引号了,测试可行:
sed -i "s#${CODE15}#ORACLE_HOME=$ORACLE_HOME/proct/11.2.0/db_1; export ORACLE_HOME#" /home/oracle/profile.txt
另外建议替换的命令格式后边加上g,也就是s/old/new/g,这样可以全文替换。
关于单双引号,网络上的一个总结:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
双引号里可以有变量,允许变量替换,双引号里可以出现转义字符
热心网友 时间:2023-11-10 06:16
sed -i 's#'$CODE15'#ORACLE_HOME=$ORACLE_BASE/proct/11.2.0/db_1; export ORACLE_HOME#' /home/oracle/.bash_profile;