• Linux 思想与法则


    Linux 思想与法则

    欢迎来到 来到大浪涛天的博客

    1. 一切皆文件(包括硬件)
    2. 由从多单一目的小程序组成
    3. 由从多单一目的小程序组成
    4. 组合小程序完成复杂任务
    5. 尽可能避免捕获用户接口,为了方便脚本编程以实现自动化执行;
    6. 使用文本文件保存程序的配置数据:使用一个文本编辑器即可完成系统及服务配置工作;

    Linux 思想与法则

    1 打印文件

    已知text.txt,打印text.txt 中不包含oldboy的字符串
    解答:先创造text.txt,假设text.txt里面包含girl.oldboy,boy

    cat >>text.txt<<EOF
    girl
    oldboy
    boy

    解法一:采用最简单的head和tail命令

    [root@server ~]# head -1 text.txt && tail -1 text.txt
    girl
    boy

    解法二:采用grep -v排除模式

    [root@server ~]# grep -v oldboy text.txt 
    girl
    boy

    解法三:采用sed模式
    sed 筛选字符串时的格式为:sed + option +'/字符串/d'
    option有n 取消默认输出,i 把结果写入文件覆盖源文件,r 用扩展正则表达式。
    d 为命令删除,p为打印,类似与复制一份

    [root@server ~]# sed  '/oldboy/d' text.txt   
    girl
    boy

    解法四:采用awk模式
    awk 的标准模式是: awk -F ' ' '{print $1}'
    F后面是分隔符,NR行号,$1是指第一列,awk擅长取列,sed擅长取行。
    $1 "="$2 其中=号为打印出来的分隔符
    $(NF):最后一列,$(NF-1)倒数第二列
    NR=行号

    [root@server ~]# awk -F " " 'NR==1 || NR==3  {print $1}' text.txt
    girl
    boy

    解法五:采用sed 取行的方法

    [root@server ~]# sed '2d' text.txt 
    girl
    boy
    或者
    [root@server ~]# sed -n '1p' text.txt && sed -n '3p' text.txt  
    girl
    boy

    2 cp文件

    假设tmp上存在file文件,从/etc/上复制一个file文件到/tmp上,不提示用户是否覆盖,需要使用cp命令且不使用f参数
    解答:因为默认cp命令是存在别名的,从alias中可以看到。

    [root@server ~]# alias cp
    alias cp='cp -i'

    解法一:使用命令的绝对路径
    /bin/cp /etc/file1 /tmp
    解法二 :使用反斜线脱马甲
    cp /etc/file1 /tmp
    解法三:
    unalias cp
    cp /etc/file1 /tmp
    查看命令绝对路径的方法:

    [root@server ~]# find / -type f -name "cp"
    /bin/cp
    [root@server ~]# which cp
    alias cp='cp -i'
    [root@server ~]# whereis cp
    cp: /bin/cp /usr/share/man/man1/cp.1.gz

    3 查看文件指定行

    查看ett.txt文件第20-30行内容
    解答:先生成文件

    ` seq 100 >ett.txt `
    解答一:[root@server ~]# head -30 ett.txt|tail -11  
    解答二:[root@server ~]# tail -81 ett.txt |head -11
    解答三:[root@server ~]# grep 25 -C 5 ett.txt  
    解答四:[root@server ~]# sed -n '20,30p' ett.txt  
    解答五:[root@server ~]# awk -F '{if (NR<31 && NR>19) print $1}' ett.txt

    注意 :如果NR前面有条件语句则if (NR<31 && NR>19)写在{}里面,否则NR写在{}外面,如'NR==3 {print $4}'

    [root@server ~]# ifconfig eth0 | awk -F '[ :]+' '{if (NR>1 && NR<3) print $4}'
    192.168.50.1
    [root@server ~]# ifconfig eth0 | awk -F '[ :]+' 'NR==2 { print $4}'                   
    192.168.50.1

    4 批量修改文件中的内容

    假如/tmp上有file1...file5,5个文件,文件上均含有oldboy,请问怎么将5个文件里的oldboy改为oldgirl?
    解答,先创建文件file1和file5

    cd /tmp &&touch file{1..5}
    [root@server tmp]# find ./ -type f -name "file*" |xargs sed -i 's#.*#oldboy#g'
    [root@server tmp]# find ./ -type f -name "file*" |xargs sed  's#oldboy#oldgirl#g' 
    oldgirl
    oldgirl
    oldgirl
    oldgirl
    oldgirl
    [root@server tmp]# find ./ -type f -name "file*" |xargs sed -i 's#oldboy#oldgirl#g'
    [root@server tmp]# cat file1
    oldgirl
    [root@server tmp]# 
  • 相关阅读:
    含字母的数字排序
    ci中简单实用的权限管理
    时间戳和日期转换
    prop
    定时器
    centos查看防火墙策略是firewall还是iptables
    centos上安装rabbitmq服务器
    springcloud微服务feign消费模式解决 com.netflix.client.ClientException: Load balancer does not have available server for client:xxx
    java正则去掉json字符串key的引号
    centos安装redis
  • 原文地址:https://www.cnblogs.com/chacha51/p/13764840.html
Copyright © 2020-2023  润新知