# 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