Linux高级

sed命令

sed命令行格式为: sed [-nefri] ‘command’ 输入文本

  1. 常用选项:

-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
set -n ‘20,30p’ 文件 常与p结合使用
set -参数 ‘/条件/ c\ sfdasf’ 文件
-e∶直接在指令列模式上进行 sed 的动作编辑;
set -e -n 20,30p’
a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
sed ‘/100/ a bbb’ 文件
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
sed ‘/^9/d’ count.log
sed ‘100d’ count.log
sed ‘2,$d’ count.log
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
要替换时,如果“原内容”或“新内容”中含有特殊字符(比如”/”或者”#”等),可以使用其它符号把各部分隔开,比如以下几种格式都是正确的
sed -i ‘s,原内容,新内容,g’ 文件
sed -i ‘s#原内容#新内容#g’ 文件
sed -i ‘s:原内容:新内容:g’ 文件
sed -i ‘s~原内容~新内容~g’ 文件
匹配规则:
. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾

awk命令

  1. 格式

    格式:awk -F: ‘BEGIN {处理文件前执行的代码块} {处理文件过程中执行的代码块} END {处理文件后执行的代码块}’ filename
    如:
    cat count.log|awk ‘BEGIN{a=1;b=2}{print $(a+b)}END{print $1}’
    awk -F: ‘BEGIN {print “这是第一行”} {print $0} END {print “这是最后一行”}’
    print $1,$2 打印多个用逗号,$0代表整行。
    其中+和?只适用于awk而不适用于grep或sed:
    + 匹配一个或一个以上前面的单字符
    ? 匹配0个或一个前面的单字符
    举例:
    /XY+Z/ 匹配XYZ、XYYYYZ
    /XY?Z/ 匹配XYZ、XZ
    ~ 匹配正则表达式
    !~ 不匹配正则表达式

  2. awk有许多内置变量用来设置环境信息,常用的有

    ARGC 命令行参数个数
    ARGV 命令行参数排列
    ENVIRON 支持队列中系统环境变量的使用
    FILENAME awk读取的文件名
    FNR 当前文件已处理的记录行数
    FS 设置域分隔符,相当于-F
    NF 域的列数
    echo ‘/user/apache/conf/httpd.conf’|awk -F/ ‘{print $NF}’
    NR 已处理的记录总行数
    OFS 设置输出字段域分隔符
    RS/ORS 换行符

  3. 举例

    awk ‘{name=$1;belts=$4;if(belts ~ /Yellow/) print name “is belt “belts}’ grade.txt
    awk ‘{if($1==”ley”)$7=$7-40; print $0}’ grade.txt
    awk ‘BEGIN{print “Name\tDifference”}{if ($6<$7){$8=$7-$6;print $1,$8}}’ gra //模拟第8列出来
    awk ‘BEGIN {print “Name\tDifference”} {if ($6 < $7) {diff = $7 - $6; print $1,diff}}’ grade.txt //同上,不模拟列,直接给变量
    awk ‘total+=$6;END{print total}’ grade

    awk ‘{total+=$6;END{print total}}’ grade*
    //区别: 上面的所有内容就将会打印出来,下面的只会打印结果

  4. 函数

    awk有很多强大的字符串函数:
    gsub(r,s,t) 在整个字符串t中用字符串s替代所有满足正则表达式r的字符串(如没指定t则默认为$0)
    index(s,t) 返回字符串s中字符串t第一次出现的位置(如不存在则为0)
    length(s) 返回s字符串的长度(如没指定s则默认为$0)
    match(s,r) 返回第一个满足正则表达式r的字符串在s字符串里面的位置(如无匹配的则为0)
    split(s,a,sep) 使用sep将字符串s分隔成为数组a的元素,返回数组元素的数量(如果没指定分隔符则默认与FS相同用法)
    sprint(“fmt”,exp) 使用printf的格式说明对表达式exp 进行格式化输出
    sub(r,s,t) 在字符串t中用s字符串替换满足正则表达式r的第一个字符串,返回1如果成功,否则返回0(如没指定t则默认为$0)
    substr(s,p,n) 返回字符串s中以p位置开始长度为n的字符串(如果没指定n则返回从p位置开始的所有字符串)
    tolower(s) 将字符串s中的所有大写字母转换为小写,返回转换后的字符串
    toupper(s) 将字符串s中的所有小写字母转换为大写,返回转换后的字符串

vim

  1. 插入命令

    i 在当前位置生前插入
    I 在当前行首插入
    a 在当前位置后插入
    A 在当前行尾插入
    o 在当前行之后插入一行
    O 在当前行之前插入一行

  2. 查找命令

    ngg 12gg 跳转12行 或者 :12
    /xxx ?xxx 向上查找 向下查找
    ctrl + f 向下翻页 同 page down.
    ctrl + b 向上翻页 同 page up.
    ctrl + d 向下翻半页 此比较有用
    ctrl + u 向上翻半页 此比较有用
    ctrl + e 向下翻一行
    ctrl + y 向上一行
    跳到文本的最后一行:按“G”,即“shift+g”

  3. 其他常用

    u 撤销(Undo)
    Ctrl + r 重做(Rx 删除当前字符edo),即撤销的撤销。
    x 删除当前字符
    dd 删除当前行
    10d 删除当前行开始的10行。

其他常用

  1. 加载文件顺序

    etc/profile–>~/.bash_profile–>~/.bashrc–>/etc/bashrc

  2. source /etc/profile 重新加载该文件

lightquant wechat
欢迎您订阅灯塔量化公众号!