1. 首先注意sed的作用是什么?本质是什么?本质就是自动的编辑器!也就是在脚本代码
中进行控制的!使编辑文件的过程自动化,以便用“批处理”方式编辑文件
2. sed是基于行的,因此按顺序对每一行执行命令。
3. 参数
sed: invalidoption -- h
用法: sed[选项]... {脚本(如果没有其他脚本)} [输入文件]... -n, --quiet,--silent
取消自动打印模式空间
也就是所有的显示都是由自己控制的!!!
-e 脚本,--expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件,--file=脚本文件
添加“脚本文件”到程序的运行列表
-i[扩展名],--in-place[=扩展名]
直接修改文件(如果指定扩展名就备份文件)
-l N,--line-length=N
指定“l”命令的换行期望长度
--posix
关闭所有 GNU 扩展
-r,--regexp-extended
在脚本中使用扩展正则表达式
-s,--separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u,--unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
--help 打印帮助并退出
--version 输出版本信息并退出 如果没有 -e,--expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。4. sed -e"1,10d" ping.sh >1
# 将ping.sh中逐行读取到缓冲区,删除ping.sh文件中1-10行,然后重定向到1文件中5. sed -e"/^#/d" ping.sh > 1
#将ping.sh中逐行读取到缓冲区,删除ping.sh文件中第一个字符是#的行,然后重定向到
1文件中6. sed -e"/"/d" ping.sh > 1
# 删除有 "的行,并输出到1文件7. 字符 描述
^ 与行首匹配
$ 与行末尾匹配
w 与任一个字符匹配
* 将与 前一个字符的零或多个出现匹配
[] 与 [ ] 之内的所有字符匹配8. 下面是几个示例:
规则表达式 描述
/./ 将与包含至少一个字符的任何行匹配
---> 也就是说只要有一个字符的行都会输出
/../ 将与包含至少两个字符的任何行匹配
---> 也就是说只要有两个字符在一起及以上的都会删除
/^#/ 将与以 "#"开始的任何行匹配
---> 匹配开头( ^ ) 以#的行删除
/^$/ 将与所有空行匹配
---> 也就是开头结尾没有东西,所以就是空行删除
---> sed -e "/^$/d" ping.sh | wc -l >1 将非空行的函数输入到文件1( 删除空行,剩下
的结果输出到文件 )
/}$/ 将与以"}"(无空格)结束的任何行匹配
---> sed -e "/}$/d" ping.sh >1 以 }结束的行
/}*^/ 将与以 "}" 后面跟有零或多个空格结束的任何行匹配
/[abc]/ 将与包含小写"a"、"b" 或 "c"的任何行匹配
---> sed -e "/[a-z]/d" ping.sh >1 将有a-z字母的行都去掉
/^[abc]/ 将与以 "a"、"b"或 "c"开始的任何行匹配
---> sed -e "/[a-z]/d" ping.sh >1 将开头是a-z的行都删除
9. sed -n -e"/{/,/}/p" ping.sh >1
----> 注意这是输出命令(p),是输出{}之间的内容
请注意新的 "-n"选项,该选项告诉 sed 除非明确要求打印模式空间,否则不这样做。
您还会注意到,我们用"p" 命令替换了 "d" 命令,如您所猜想的那样,这明确要求 sed
打印模式空间。就这样,将只打印匹配部分。
10. sed -n -e"/judge[[:space:]]*(/, /^}/p" ping.sh>1
----> 输出judge函数的所有内容
11. 如何使用 sed来执行字符串替换、创建更大的 sed 脚本以及如何使用 sed 的附加、插
入和更改行命令。12. 替换:
sed -e"s/echo/oche/" ping.sh > 1
----> s前缀就是替换命令,就是将ping.sh中出现的echo替换为oche
----> 同时注意:只替换每行第一次出现的哦~
----> 请注意:这条命令没有改变源文件中的内容,而下面的就是可以的
sed -e"s/echo/oche/g" ping.sh >1
----> 将所有的出现的都替换 ( 全局替换吧 )
我们需要知道的是,s/// 是一个命令哦,是不可分割的呗~所以我们可以与其他的命
令一起使用!
sed -e "1,10s/echo/ohce/g" ping.sh > 1
----> 也就是只处理1-10行( 包括1和10 )
注意:我们要知道的是:1和10指定的行结束,我们也可使用特殊的字符串结束!如
下:
sed -e "/^$/, /^}/s/echo/ohce/g" ping.sh > 1
----> 由空行开始执行,直到遇到 } 开始的行结束
注意:我们并没有硬性规定一定是s、/组合,这只是常规的用法,当然也可以使用别的
字符,例如
sed -e "s:echo:ooo:g" ping.sh >1 也是可以的哦~
但是一般在替换的字符串中有/才用这样的方法
例如:
sed -e "s:pt/ss.ps:pt/ss:g" ping.sh > 1
13. sed -e"s/<.*>//g" ping.sh >1
---->将<>形式替换成空格!注意其中有一个 " . ",所以最少是一个字符哦~
但是你自己运行一下,这是你需要的结果吗?!!!!
显然不是不是吗?
在我的测试代码中的内容是:
# pt/ss/ps <> <> <> <sdjsdvb> <...> <yyyy>
# <z>
那我本来想留下的结果是:
# pt/ss/ps
#
但是很不幸的是结果是:
# pt/ss/ps
这就是s///的处理机制不一样呗~!那么他会寻找最长的字符串,我们需要怎么作
呢!?
sed -e"s/<[^>]*>//g" ping.sh > 1
中间是>的后面不处理
注意:有一些shell是不支持的!
14.
注意下面代码的不同:
对于处理这样一行:<yjasbhdcjsd> <a>
sed -e"s/<[a-z]>//g" ping.sh>1 #注意此处只是匹配一个字符而已
和
sed -e"s/<[a-z]*>//g" ping.sh>1 #此处匹配以字符开头的多个字符
15.
这将匹配零或多个全部为"a"、"b"、"c"..."v"、"w"、"x" 的字符。另外,可以使用
"[:space:]"字符类来匹配
空格。以下是可用字符类的相当完整的列表:
字符类 描述
[:alnum:] 字母数字 [a-zA-Z 0-9]
[:alpha:] 字母 [a-zA-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字[0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写[a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写[A-Z]
[:xdigit:] 十六进制数字 [0-9a-fA-F]
16. 高级替换功能
我们现在想在所有的行前面加上MM,那么怎么处理呢?是所有的行哦~
sed -e"s/.*/MM: &/g" ping.sh >1
----> 就是 & 符号处理
Linux下scp命令详解Linux下安装飞信客户端(OpenFetion)相关资讯 Linux命令
- 48 字节命令可令 Linux 系统当机! (今 07:55)
- 在Linux笔记本上执行这句命令能致 (02月02日)
- .NET开发必会的Linux命令 (12/20/2015 10:32:03)
| - 运维工程师必会的109个Linux命令 (03月09日)
- 有趣的Linux命令行:随机输出唐诗 (12/28/2015 20:14:23)
- 10 个 Linux 中的 passwd 命令示例 (10/29/2015 10:14:30)
|
本文评论 查看全部评论 (0)