shell sed命令使用心得
2011-07-25 10:49
316 查看
在使用sed过程中出错:
sed -i "s/$sub/$rep/g" tmp
当变量sub或者变量rep中有字符'/'时,执行sed命令会出错。
在网上查了很多资料,查出来原因:变量替换后有'/',跟sed 替换的'/'冲突
解决方法:将变量中的字符'/'替换为'\/'。
下面代码的功能:替换文件tmp中dir的目录'/a/b/c'为'/1/2/3'
#!/bin/bash
echo 'dir=/a/b/c/d' > tmp
fname=tmp
if [ -f $fname ]
then
lpath=`sed -n /dir/p "$fname"`
fi
if [ ${#lpath} -gt 0 ]
then
tmp=${lpath#*/}
tmp2=/${tmp%/*}
tmp3=${tmp2//\//\\/}
fi
new_dir='\/1\/2\/3'
sed -i "s/$tmp3/$new_dir/g" $fname
cat $fname
注释:
${#lpath}: 获取字符串lpath的长度
${lpath#*/}:从字符串lpath的开头开始,删除最短匹配字符'/'的子串
${tmp%/*}: 从字符串tmp的结尾开始,删除最短匹配字符'/'的子串
${tmp2//\//\\/}: 将字符串tmp2中字符'/'替换为'\/'
sed -i "s/$sub/$rep/g" tmp
当变量sub或者变量rep中有字符'/'时,执行sed命令会出错。
在网上查了很多资料,查出来原因:变量替换后有'/',跟sed 替换的'/'冲突
解决方法:将变量中的字符'/'替换为'\/'。
下面代码的功能:替换文件tmp中dir的目录'/a/b/c'为'/1/2/3'
#!/bin/bash
echo 'dir=/a/b/c/d' > tmp
fname=tmp
if [ -f $fname ]
then
lpath=`sed -n /dir/p "$fname"`
fi
if [ ${#lpath} -gt 0 ]
then
tmp=${lpath#*/}
tmp2=/${tmp%/*}
tmp3=${tmp2//\//\\/}
fi
new_dir='\/1\/2\/3'
sed -i "s/$tmp3/$new_dir/g" $fname
cat $fname
注释:
${#lpath}: 获取字符串lpath的长度
${lpath#*/}:从字符串lpath的开头开始,删除最短匹配字符'/'的子串
${tmp%/*}: 从字符串tmp的结尾开始,删除最短匹配字符'/'的子串
${tmp2//\//\\/}: 将字符串tmp2中字符'/'替换为'\/'
相关文章推荐
- 非程序员的GNU Emacs使用心得...... Shell Mode 第5集 历史命令杂谈
- shell 文件中使用sed/cut/grep命令和变量
- 王高利:Linux_shell三剑客之sed命令使用详解
- shell脚本编程学习笔记(3)sed命令的使用
- sed 命令的使用及shell判断语句
- linux下shell脚本中sed命令使用变量
- 使用shell命令sed将指定目录下的所有文件中指定的字符串替换成指定的字符串
- 【Shell】使用sed命令替换文件中的某一行
- Shell脚本——使用sed命令编辑文本
- 在shell中使用sed命令替换/为\/
- shell命令使用sed获取ip命令
- shell三剑客之sed命令使用详解
- 非程序员的GNU Emacs使用心得...... Shell Mode第4集 历史命令编辑
- shell脚本的sed命令使用小结
- sed,grep命令使用心得
- shell中export的使用心得
- [Shell]字符截取命令:cut, printf, awk, sed
- Shell中的grep、awk和sed的常用命令和语法
- shell--指“提供使用者使用界面”的软件(命令解析器)
- c++调用shell 或者dos命令—使用system函数