zoukankan      html  css  js  c++  java
  • sed,grep,进阶+source+export+环境变量

    三剑客之sed

    概括流程:从文件或管道中,可迭代读取。

    命令格式: sed(软件) 选项 sed命令 输入文件

    两个sed命令:

    a: 追加文本到指定行后

    i: 插入到指定行前

     sed -i '1i houbinglei' log.txt 
     sed -i '1a houbinglei' log.txt 
    

    多行增加(两种方式)

    sed '3a houbinglei
    liuchunhui' log.txt 
    
    sed '3a LLL
    > KKK
    > iii' log.txt
    

    指定执行的地址范围 n1,n2 sed命令

    地址用逗号分割,n1,n2可以是数字,正则表达式,或者二者的组合。

    10 sed命令  对第十行操作
    10.20  包括第10,20行,对10到20行操作
    10,+20  对10到30行操作
    1~2 等差数列,对1、3、5、7等行操作
    10,$ 对10行到最后一行操作
    /oldboy/  对匹配这个字符串的行操作
    /oldboy/,+2  对匹配oldboy的行到其后两行操作 
    

    sed命令 d

    sed '1~2d' log.txt
    sed '/oldboy/d' log.txt
    

    文本替换

    s: 单独使用,将第一处匹配的字符串进行替换 ==》sed命令

    g: 每一行进行全部替换 ==》 非sed命令、

    -i: 修改文件内容 sed软件的选项

    sed -i '3s/old/new/' log.txt  指定行精确修改
    

    双引号、单引号区别:

    双引号可以识别变量
    单引号不可以
    

    sed软件的() 可以记住正则表达式的一部分,()本身是扩展正则表达式,两个表示转义,然后1为第一个小括号里匹配的内容,2为第二个小括号里匹配的内容,sed最多可以记住9个。

    sed 's/^.*am ([a-z]*) <student>/1/g' txt.xx 
    i am oldboy student ==> oldboy
    

    & 代表匹配到的东西。,就是old,s/old/new/

    touch file{1..5}.txt  创建5个文件
    ls |grep stu | sed 's/(^.*).txt/mv & 1.jpg/' | bash  传递给bash执行命令
    
    mv stu_1022_1_finished.txt stu_1022_1_finished.jpg
    mv stu_1022_2_finished.txt stu_1022_2_finished.jpg
    mv stu_1022_3_finished.txt stu_1022_3_finished.jpg
    mv stu_1022_4_finished.txt stu_1022_4_finished.jpg
    mv stu_1022_5_finished.txt stu_1022_5_finished.jpg
    

    sed-n '2p' log.txt -n 和p一起用,只会显示指定输出的行

    三剑客之grep

    点的特殊含义:

    1. 当前目录
    2. 使得文件生效,相当于source
    3. 隐藏文件
    4. 任意一个字符(正则匹配)
    

    grep参数:

    -c  计算找到搜索字符串的次数
    -n  显示行号
    -i  忽略大小写
    -v	取反
    -A	匹配字符串及其行后n行,after
    -B	before
    -C  context,前后各n行
    

    source

    当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile
    对source进行了学习,并且用它与sh 执行脚本进行了对比,现在总结一下。

    source命令:
    source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
    功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
    source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
    用法:
    source filename 或 . filename
    source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。
    
    source filename 与 sh filename 及./filename执行脚本的区别在那里呢?
    1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
    2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
    3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
    
    
    举例说明:
    1.新建一个test.sh脚本,内容为:A=1
    2.然后使其可执行chmod +x test.sh
    3.运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
    4.运行./test.sh后,也是一样的效果
    5.运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中
    

    export

    export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。

    一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

    export  查看当前环境变量
    

    环境变量

    改变环境变量,只对当前用户生效

    修改设置方法:在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。 
    
    export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
    同样注意,添加完成后新的环境变量不会立即生效,除非你调用source ./.bash_profile 该文件才会生效。否则只能在下次重进此用户时才能生效。
    

    对所有用户生效

    修改/etc/profile
    export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
    保存,退出,然后运行:
    #source /etc/profile
    

    临时有效的环境变量(只对当前shell有效)

    直接使用export指令添加。 
    

    设置环境变量常用的几个指令

    echo
    查看显示环境变量,使用时要加上符号“$”例:echo $PATH
    
    export
    设置新的环境变量 
    export 新环境变量名=内容 
    例:export MYNAME=”LLZZ”
    
    修改环境变量
    修改环境变量没有指令,可以直接使用环境变量名进行修改。 
    例:MYNAME=”ZZLL”
    
    env
    查看所有环境变量
    
    set
    查看本地定义的所有shell变量
    
    unset
    删除一个环境变量 
    例 unset MYNAME
    
    readonly
    设置只读环境变量。 
    例:readonly MYNAME
    My name is 侯冰雷 ~~欢迎转载 ~~欢迎关注 ~~欢迎留言
  • 相关阅读:
    百度地图代码API
    3层下拉列表
    stl+数论——1247D
    数论+乱搞——cf181B
    思维+multiset优化——cf1249E
    线性基思想+贪心——cf1249C
    tarjan求强连通+缩点——cf1248E
    排序+模拟+优先队列——cf1248E
    栈+括号序列+暴力枚举——cf1248D1
    二分+贪心——cf1251D
  • 原文地址:https://www.cnblogs.com/houbinglei/p/9268867.html
Copyright © 2011-2022 走看看