九零不老心
发布于 2019-08-11 / 4 阅读 / 0 评论 / 0 点赞

sed命令常用方法

# https://www.cnblogs.com/ginvip/p/6376049.html
# https://blog.csdn.net/feifei_csdn/article/details/80841442
# https://blog.csdn.net/sunny_future/article/details/80174530

#sed命令
    # sed参数
        a 追加append
        i 插入insert
        d 删除delete
        s 替换substitution
        w 写入
        c 更改
    # a 行追加
        sed -i '4a this is an added line' filename
        # 在文件的每行末尾添加一个回车
            sed '/$/a\\n' filename
        # 在文件的末尾添加字符串eof
            sed '$a\eof' filename
    # i 插入
        # 找出文件 /etc/fstab 中以 UUID 开头的行,并在其上一行添加单行字符串
            sed '/^UUID/i\hello world' /etc/fstab
    # d 删除指定行
        sed -i '5d' filename
    # s 替换内容 (sed一次指定多条不同的替换命令,用";"隔开)
        sed 's/被替换的内容/替换内容/g' filename # 显示替换后内容,实际不更改文件本身内容
        sed -i 's/被替换的内容/替换内容/g' filename # 直接替换文件本身内容
        # 指定字符串前追加内容
            sed -i 's/^.*str/#&/g' filename
        # 带有关键字的行替换
            sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
            # 另一种使用后面的 c 更改
            sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
        # 带有变量的字符串替换
            sed -i 's/'$keyword01'/'$keyword02'/g' filename
        # 带有变量的行替换
            keyword01="SELINUX="
            keyword02="SELINUX=disabled"
            sed -i 's/^'$keyword01'.*/'$keyword02'/' /etc/sysconfig/selinux
            # 另一种使用后面的 c 更改
            sed -i '/^'$keyword01'/c'$keyword02 /etc/sysconfig/selinux
    # w 写入
        # 将文件 /etc/fstab 中以 UUID 开头的行指定输出(重定向)到 /tmp/fstab.txt 且不显示到屏幕
            sed -n '/^UUID/w /tmp/fstab.txt' /etc/fstab
    # c 更改
        # 将 /etc/fstab 中含有字符串 UUID 的行替换为 hello world
            sed '/UUID/c\hello world' /etc/fstab
        # 替换以某字符串开头的行,为指定内容
            sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
    # 显示某行
        sed -n '1p' filename
        sed -n '1,2p' filename
        sed -n '$p' filename
        sed -n '2,$p' filename
        # 打印包含指定字符串的行
            sed -n '/BUF/p' filename
            # 打印文件总行数
                sed -n '$=' /etc/fstab
        # 打印日志文件中出现错误信息的行号及其内容
            sed -n '/error/{=;p}'  /var/log/messages

# 范例
    1) sed '/$/a\\n' test.txt,可以在文件的每行末尾添加一个回车
    2) sed '$a\eof' test.txt,可以在文件的末尾添加'eof
    sed -n 使用变量
    retain_package_num=4
    ls | grep -E "^BTGCP-Order-Service\.war\.[0-9]*$" | sort -u -n -r -t '.' -k 3 | sed -n ''$retain_package_num',$p'
    3) 如果匹配不存在,则添加
        grep -q '^option' filename && sed -i 's/^option.*/option=value/' filename || echo 'option=value' >> filename

# other
    sudo grep '^PasswordAuthentication' /etc/ssh/sshd_config

    sudo sed -i '/^PasswordAuthentication/cPasswordAuthentication yes' /etc/ssh/sshd_config