首先默认获取了权限,最好到一个空目录,看清楚指令再操作
简单:覆写或追加:
- 任意命令行输出 >(覆盖) >>(追加) 单文件输出
- tee默认覆盖 -a追加 能多文件输出
echo "hi" > echo.txt
seq 1 5 > seq.txt
ls > ls.txt
# 先确保路径存在,避免报错
mkdir -p a/b
cat echo.txt seq.txt ls.txt > a/b/cat.txt
# 使用单引号开头,可以防止解析$为变量
tee -a a/b/cat.txt a/b/tee.txt <<'EOF'
This is tee,use HereDocument$1$2
EOF
clear
cat a/b/cat.txt a/b/tee.txt
#可选 涉及删除 谨慎操作
rm -rf a *.txt
Here Document传代码和配置文件可以原封不动直接粘贴,不用转义
实战示例:创建便捷的systemctl 指令
cat>>~/.bashrc<<'EOF'
alias start='function _startctl() { systemctl start "$1"; }; _startctl'
alias restart='function _restartctl() { systemctl restart "$1"; }; _restartctl'
alias stop='function _stop() { systemctl stop "$1"; }; _stop'
alias status='function _statusctl() { systemctl status "$1"; }; _statusctl'
EOF
source ~/.bashrc
status nginx
就可以很方便的操作服务了
进阶:使用sed(简洁 快速 批量)查找目标内容,可打印可替换
cat>target-file<<EOF
# hi:
TEST100test
TEST200test
EOF
# g全局替换 默认大小写敏感
sed 's/test/sed/g' target-file
# I大小写不敏感 p(print)多打印匹配行(通常配合-n做打印使用,后面有示例)
sed 's/test/sed/gIp' target-file
cat target-file # 可见此时内容还未修改
# 补充:&原内容占位符,()捕获
sed 's/100/**&**/g' target-file
sed 's/\(200\)\(test\)/\2\1\1/' target-file
sed -i 's/test/sed/gIp' target-file
cat target-file
sed -n 's/sed/Test/gIp' target-file
sed -n 's/sed/Test/gI' target-file
cat target-file
sed -in 's/sed/Test/gIp' target-file
cat target-file
接下来我们将 查询(‘s/xx/xxx/’) 换成 删除(‘d’)
sed '2d' target-file # 删除第2行
cat target-file
sed -i '2,4d' target-file # [2,5) 真删除2到4行
cat target-file
sed '/^#/d' target-file # 删除以 # 开头的注释行
sed '/^$/d' target-file # 删除空行
多条命令
# 分号分隔
sed 's/foo/bar/; s/baz/qux/' file
# 或使用 -e
sed -e 's/foo/bar/' -e 's/baz/qux/' file
# 还有 -f 从文件中读取sed指令
好啦,以上已经涵盖了大部分使用指令修改文本的情况,更多细节还得大家在实战中去多多体会
4 个赞