stream editor: 流式文本编辑器;
sed 命令的侧重点在于对文本的编辑;
sed 的基本模式
1 2 3 4 5 6
| sed [-nefri] '[target line]command' $file_path
sed [-nefri] '/regex/command' $file_path
sed [-nefri] 'line,/regex/command' $file_path
|
sed 的常用选项
1 2 3 4 5 6 7 8
| 1. -n: silent 静默模式, 只输出被 sed 处理过的行; 2. -e: --expression, 指定命令, 可以使用多个 -e 执行多个命令: sed -e '$d' -e '/regex/p' $file_path 3. -f: 执行给定文件里的命令; 4. -r: --regexp-extended, 使 sed 支持拓展的正则表达式语法, 拓展的正则表达式较常规的正则表达式增加支持了如下语法: +, ?, |, () 由于这些拓展语法也非常常见, 所以推荐若使用 sed 的 regex 功能时带上 -r 选项; 5. -i: 直接在指定的文件里修改编辑, stdout 不输出任何内容;
|
sed 的 command
1 2 3 4 5 6 7 8 9 10
| 1. i: insert 到 目标行的上一行 2. a: append 到 目标行的下一行 3. c: replace, 不能使用正则表达式 4. s: replace, 使用正则表达式, 一般需要与 -r 配合使用, 模式为: s/regex/new_str/g, 替换文件中所有的 regex; s/regex/new_str, 只替换每行第一个被匹配上的 regex; s/regex/new_str/p, 如果某行被匹配上了就打印出来, 常与 -n 选项一同使用; 5. d: delete 6. p: print, 一般需要与 -n 选项一同使用, 否则看不出打印效果 7. y: 按每个字符映射, 模式案例: y/1234567890/ABCDEFGHIJ/
|
典型示例
1 2 3 4 5 6 7 8
| sed -n '$p' $file_path
sed -i -e '9,$d' -e '1,3a append' $file_path
sed -ri 's/^(test|ping)[a-z]+.$/kill/g' $file_path
sed -n '9,/test$/p' $file_path
|
1 2 3 4
|
cron_str='5 * * * * sh /home/q/tools/bin/log_collect.sh 1>/dev/null' sed "\$a ${cron_str}" /var/spool/cron/root
|
参考链接