sed
常用参数及命令
sed [-nefri] ‘command’ test.txt (尽量按照标准格式使用单引号)
sed | 处理文本文件,并输出到标准输出(控制台) | command | |||
---|---|---|---|---|---|
-e | 可以指定多个命令 | a | 新增 | ||
-f | 指定命令文件 | c | 替换 | ||
-n | 取消默认控制台输出,与p一起使用可打印指定内容 | d | 删除 | ||
-i | 输出到原文件,静默执行(修改原文件的意思) | i | 插入 | ||
p | 打印,要和-n参数一起使用 | ||||
s | 替换(匹配局部替换) |
新增 a
sed ‘2a testContent’ test.txt | 在第 2 行后面新增一行内容 |
---|---|
sed ‘1,3a testContent’ test.txt | 在原文的第 1~3 行后面各新增一行内容 |
替换 c
sed '2c test****Content’ test.txt | 将第 2 行内容整行替换 |
---|---|
sed '1,3c test****Content’ test.txt | 将第 1~3 行内容替换成一行指定内容 |
删除 d
sed ‘2d’ test.txt | 删除第 2 行 |
---|---|
sed ‘1,3d’ test.txt | 删除第1~3行 |
插入 i
sed '2i test****Content’ test.txt | 在第 2 行前面插入一行内容 |
---|---|
sed '1,3i test****Content’ test.txt | 在原文的第 1~3 行前面各插入一行内容 |
打印 p
sed ‘2p’ test.txt | 重复打印第 2 行 |
---|---|
sed ‘1,3p’ test.txt | 重复打印第1~3行 |
sed -n ‘2p’ test.txt | 只打印第 2 行 |
sed -n ‘1,3p’ test.txt | 只打印第 1~3 行 |
sed -n ‘/user/p’ test.txt | 打印匹配到user的行,类似grep |
sed -n ‘/user/!p’ test.txt | ! 反选,打印没有匹配到user的行 |
sed -n ‘s/old/new/gp’ test | 只打印匹配替换的行 |
替换 s
sed ‘s/old/new/’ test.txt | 匹配每一行的第一个old替换为new |
---|---|
sed ‘s/old/new/gi’ test.txt | 匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写 |
sed ‘3,9s/old/new/gi’ test.txt | 匹配第 3~9 行所有old替换为new |
参数 -e
sed -e ‘s/系统/00/g’ -e ‘2d’ test.txt | 执行多个指令 |
---|
参数 -f
sed -f ab.log test.txt | 多个命令写进ab.log文件里,一行一条命令,效果同-e |
---|
示例: 匹配–>操作(增删改查)
-
sed ‘s/book/books/’ file 文本中的book替换成books(每行第一个book)
-
sed ‘s/book/books/g’ file 文本中所有的book替换成books
-
sed -n ‘s/test/TEST/p’ file 表示只打印文本中发生替换的行
-
sed -n '1,4’p 1.txt 打印指定的行
-
sed -n '/root/'p 1.txt 打印包含指定字符串的行
-
sed -i ‘s/book/books/g’ file 表示直接修改源文件,文本中所有的book替换成books
-
sed -i ‘s/^/#&/’ 1.txt 表示每行行首添加#号,直接修改文件
-
sed ‘/^$/d’ file 删除空白行(注意:d是在后面的,s命令在前面)
-
sed ‘2d’ file 删除第二行
-
sed ‘2,$d’ file 删除第二行到末行所有行
-
sed ‘$d’ file 删除最后一行
-
sed ‘s/[0-9]//g’ 1.txt 删除所有数字(实际上是所有数字替换成空了)
-
sed ‘s/[^0-9]//g’ 1.txt 删除所有非数字
-
sed ‘s/^192/localhost&/’ file 所有以192开头的行都会在行首加上localhost
-
echo “a handsome boy”| sed ‘s/\w+/[&]/g’ \w+ 匹配每一个单词,[&] 替换它,& 表示所匹配到的单词; 结果:[a] [handsome] [boy]
-
sed ‘s/(root)(.)(bash)/\3\2\1/’ 1.txt == sed 's#(root)(.)(bash)#\3\2\1#’ 1.txt
表示:调换两个字符串位置; /可以使用 #,@ 等
-
sed -e ‘/root/p’ -e ‘/body/p’ -n 1.txt == sed -n ‘/root/p; /body/p’ 1.txt
实现同时进行多个任务;会显示root或者body的行
-
sed -n ‘p;n’ 1.txt == sed -n ‘1~2p’ 1.txt 打印奇数行
-
sed -n ‘n;p’ 1.txt == sed -n ‘2~2p’ 1.txt 打印偶数行
first~step 表示以first开始,后面每次加step;例如1~2:表示所有的奇数行
-
sed ‘=’ 1.txt | sed ‘N;s/\n/\t/’ 显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
-
sed G 1.txt 在每一行后面插入一个空行
-
sed ‘{x;p;x}’ 1.txt 在每一行前面插入一个空行
awk
变量名称 | 代表意义 |
---|---|
NF | 每一行 ($0) 拥有的栏位总数 |
NR | 目前 awk 所处理的是『第几行』数据 |
FS | 目前的分隔字节,默认是空白键 |
命令参数格式:
awk ‘条件类型1{动作1} 条件类型2{动作2} …’ filename