man sed
sed [选项]... {脚本 (如果没有其他脚本)} [输入文件]
sed [-Ealn] command [file ...]
sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed 脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据
$ sed 4a\newline testfile
没有-e, --expression, -f 或 --file, 4a\newline 是第一个非选项参数, 被视为脚本;
testfile 被视为输入文件
$nl /etc/passwd | sed '2,5d'
如果没有输入文件,那么程序将从标准输入读取数据: nl /etc/passwd
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为 sed 脚本: '2,5d'
nl tset.sh |sed -n -e '/hello/{s/hello/bluehello/;p;q}'
-n -e 是选项
''框起来的是脚本
{}框起来的是动作
s, p, q 都是动作,用;号分隔
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
-e 表示多点编辑,第一个编辑命令删除/etc/passwd 第三行到末尾的数据,第二条命令搜索 bash 替换为 blueshell。
$ nl /etc/passwd | sed -n '5,7p'
nl tset.sh |sed -n '/hello/{s/hello/bluehello/;p;q}'
如上图