sed中在对内容进行修改时,有时候需要引用外部变量的值或者获取一个shell命令执行的结果,以便达到更加可观的输出结果

1、sed中使用变量替换
1)sed命令使用双引号的情况下,使用$var直接引用
[rooot@192 ~]$ cat test.txt
192.168.53.128/contiv/name
[rooot@192 ~]$ ip=192.168.53.77
[rooot@192 ~]$ sed -i "s/192.168.53.128/$ip/g" test.txt
[rooot@192 ~]$ cat test.txt
192.168.53.77/contiv/name
[rooot@192 ~]$
如果替换的变量内容中含有/符号则会提示错误,原因是从语法上看,没有任何问题;但由于变量中包含有“/”作为分隔符,这会和sed的替换操作的分隔符“/”引起混淆;所以,只要不使用“/”做分隔符就可以解决这个问题,如果使用“%”而不是“/”来作为sed的替换操作的分隔符,就不会出错。其实使用#或%或;作为分隔符也是可以的,只要不会与替换中有相同的而且不是元字符的特殊符号都是可以的
[rooot@192 chenwei]$ path=/home/root
[rooot@192 chenwei]$ cat test.txt
192.168.53.77/contiv/name
[rooot@192 chenwei]$ sed -i "s%192.168.53.77%$path%g" test.txt
[rooot@192 chenwei]$ cat test.txt
/home/root/contiv/name
[rooot@192 chenwei]$ sed -i "s#/home/root#192.168.53.77#g" test.txt
[rooot@192 chenwei]$ cat test.txt
192.168.53.77/contiv/name
[rooot@192 chenwei]$
2)sed命令使用单引号的情况下,使用'"$var"'引用,即变量用双引号括起来,外面再加上单引号
[rooot@192 chenwei]$ ip=192.168.0.34
[rooot@192 chenwei]$ cat test.txt
192.168.53.77/contiv/name
[rooot@192 chenwei]$ sed -i 's/192.168.53.77/'"$ip"'/g' test.txt
[rooot@192 chenwei]$ cat test.txt
192.168.0.34/contiv/name
[rooot@192 chenwei]$

2、sed中执行外部命令
1)sed命令使用单引号的情况下使用'`shell command`'或者'$(shell command)'引用命令执行的结果
[rooot@192 chenwei]$ cat test.txt
192.168.0.34/contiv/name
[rooot@192 chenwei]$ ip=192.168.0.56
[rooot@192 chenwei]$ sed -i 's/192.168.0.34/'`echo $ip`'/g' test.txt
[rooot@192 chenwei]$ cat test.txt
192.168.0.56/contiv/name
[rooot@192 chenwei]$
或者使用新式的命令
[rooot@192 chenwei]$ cat test.txt
192.168.0.56/contiv/name
[rooot@192 chenwei]$ ip=192.168.0.68
[rooot@192 chenwei]$ sed -i 's/192.168.0.56/'$(echo $ip)'/g' test.txt
[rooot@192 chenwei]$ cat test.txt
192.168.0.68/contiv/name
[rooot@192 chenwei]$
2.sed命令使用双引号的情况下直接`shell command`或者$(shell command)引用命令执行的结果
[rooot@192 chenwei]$ cat test.txt
192.168.0.68/contiv/name
[rooot@192 chenwei]$ ip=192.168.0.56
[rooot@192 chenwei]$ sed -i "s/192.168.0.68/$(echo $ip)/g" test.txt
[rooot@192 chenwei]$ cat test.txt
192.168.0.56/contiv/name

在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子

3、一些小技巧

在每行的头添加字符,比如"HEAD",命令如下:
sed 's/^/HEAD&/g' test.file
在每行的行尾添加字符,比如“TAIL”,命令如下:
sed 's/$/&TAIL/g' test.file
1)"^"代表行首,"$"代表行尾
2)'s/$/&TAIL/g'中的字符g代表每行出现的字符全部替换,否则只会替换每行第一个,而不继续往后找了

4、直接修改文件的内容

直接编辑文件选项-i,会匹配test.txt文件中每一行的第一个This替换为this:
sed -i 's/This/this/' test.txt

5、shell变量的写法

${var} 变量var的值, 与$var相同

echo ${s1}${s2}   # 当然这样写 $s1$s2 也行,但最好加上大括号

6、shell支持逻辑与或的写法

[[]] 表达式
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]$ [[ 2 < 3 ]] && echo 'ok'
ok

[root@localhost ~]$ [[ 2 < 3 && 4 > 5 ]] && echo 'ok'
ok
注意:[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| &&

shell脚本知识点汇总的更多相关文章

  1. Shell脚本使用汇总整理——达梦数据库备份脚本

    Shell脚本使用汇总整理——达梦数据库备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html 脚本 ...

  2. Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本

    Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...

  3. Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本

    Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...

  4. Shell脚本使用汇总整理——文件夹及子文件备份脚本

    Shell脚本使用汇总整理——文件夹及子文件备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html ...

  5. Shell脚本使用汇总整理

    Shell脚本使用汇总整理 一.Shell脚本常用的头部格式: 头部的作用就是告知linux此脚本的类型: 常用的头部格式如下:(/bin/bash,是bash的路径,如果不知道路径可以通过which ...

  6. Shell脚本命令汇总中

    一.换行 echo -e 可以通过\n编译换行 echo -n不换行,如果加入了\n,则会打出“\n”字符 #!/bin/bash echo -e "O\nK\n!" echo & ...

  7. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

  8. shell脚本基本知识点

    Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.用户通过这个界面访问Linux操作系统内核的服务.Shell既是一种命令语言,又是一种程序设计语言. 1.Shell 环境 Shel ...

  9. shell脚本常用命令汇总

    一.shell脚本概述和入门 (1)shell脚本是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核 (2)shell脚本的常用执行方式: 第一种:采用bash或sh+脚本的相对路径或 ...

随机推荐

  1. AdobeFlashPlayer.资料

    1.chrome 设置 chrome-->设置-->高级-->内容设置-->Flash 2. 3. 4. 5.

  2. matlab函数之imresize()

    B = imresize(A,scale) B = imresize(A,scale) 返回图像 B,它是将 A 的长宽大小缩放 scale 倍之后的图像.输入图像 A 可以是灰度.RGB 或二值图像 ...

  3. php数组转换成js可用的数组的两种方式

    1.如果你理解JSON数据格式的话,这个问题就异常简单: <?php $a =array('1','2','3'); ?> <script language="javasc ...

  4. EAV模型

    了解EAV设计基本原理的最好方法就是理解行建模(row modelling,其中EAV是广义形式). 以一超市数据库为例,必须管理数以千计的产品和品牌,其中许多产品存在期很短暂.那么,显而易见,产品名 ...

  5. Firefox 不知道如何打开此地址,因为协议 (javascrpit) 未和任何程序关联.

    用火狐打开出现这个错误,360没事:这个是什么原因???怎么解决?代码:<a href="javascrpit:;"onclick="showD('pas','ri ...

  6. BEC listen and translation exercise 39

    What about jigsaw puzzle design for visually handicapped?给视觉障碍人士设计拼图怎么样? Length is 50cm, and then th ...

  7. ATL和vc++中的智能指针(分别是CComPtr和_com_ptr_t)

    一.智能指针的概念 智能指针是一个类,不是指针,智能指针在所包含的指针不再被使用时候会自动释放该所包含指针所占用的系统资源,而不用手动释放. 原理:智能指针封装了包含指针的AddRef()函数和Rel ...

  8. Gym - 100570B :ShortestPath Query(SPFA及其优化)

    题意:给定N点M边的有向图,每条边有距离和颜色,一条有效路径上不能有相邻的边颜色相同.现在给定起点S,多次讯问S到点X的最短有效距离. TLE思路:用二维状态dis(u,c)表示起点到u,最后一条边的 ...

  9. JSTL1.0 知识回顾与总结

    JSTL1.0,由四个定制标志库(core,format,xml和sql) 和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV )组成. 1.基本输出设置操 ...

  10. 判断iOS系统的Model

    获取iOS系统的Model   (参考网址:https://www.theiphonewiki.com/wiki/Models) + (NSString *)getModel{ struct utsn ...