免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 2647 | 回复: 20
打印 上一主题 下一主题

这段sed的用法看不懂了,能说说什么意思吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-16 16:58 |只看该作者 |倒序浏览
# cat command.txt
This describes the Linux ls command.
This describes the Linux cp command.

# sed '/Linux/{h;s/.* Linux \(.*\) .*/\1:/;p;x;}' command.txt
这个我看不懂了,能讲讲吗

论坛徽章:
0
2 [报告]
发表于 2005-05-16 17:10 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

我又看了shell十三问里面的7、8,初步明白了为什么用{}
但是其他还是不明白

论坛徽章:
0
3 [报告]
发表于 2005-05-16 17:14 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

输出包含Linux的文本行,并在Linux字符串后面加:

论坛徽章:
0
4 [报告]
发表于 2005-05-16 17:20 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

书上的执行结果是
ls:
This describes the Linux ls command.
cp:
This describes the Linux cp command.

可是我自己的执行结果是
ls command.:
This describes the Linux ls command.
cp command.:
This describes the Linux cp command.

书上解释说
第一个h把第一行放入hold space,然后换成ls:,然后打印出ls:
是不是书上说错了?还是怎么样?为什么和书上的执行结果不同?

论坛徽章:
0
5 [报告]
发表于 2005-05-16 17:25 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "我是笨笨" 发表:
# cat command.txt
This describes the Linux ls command.
This describes the Linux cp command.

# sed '/Linux/{h;s/.* Linux \(.*\) .*/\1:/;p;x;}' command.txt
这个我看不懂了,能讲讲吗


看清空格

输出如下:

  1. ls:
  2. This describes the Linux ls commans
  3. cp:
  4. This describes the Linux cp commans
复制代码

论坛徽章:
0
6 [报告]
发表于 2005-05-16 17:35 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

测试结果如下:
$ cat cmo.txt
this is the linux comd
red hat linux is very good
$ sed '/linux/s/.*linux\(.*\).*/\1:/' cmo.txt
comd:
is very good:

论坛徽章:
0
7 [报告]
发表于 2005-05-16 17:55 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

h H    Copy/append pattern space to hold space.
x      Exchange the contents of the hold and pattern spaces.
p      Print the current pattern space.

这个是sed的帮助里找的。

首先,/Linux/ 找出包含LINUX的行

然后执行的命令是 'h'。该命令告诉 sed 将模式空间(保存正在处理的当前行的缓冲区)的内容复制到保留空间(临时缓冲区)。

然后执行的命令是 's'。好象是把This describes the Linux ls command一句根据需要分成4部分。.*   Linux      \(.*\)        .*

然后在ls(or cp)区域两边插入带反斜杠的圆括号来定义区域,1: 说明第一个区域的显示格式(如ls command.:)

然后执行'x'命令。x命令没用过,根据man的提示,好象是把模式空间和保留空间的内容写到保留空间上。

论坛徽章:
0
8 [报告]
发表于 2005-05-16 17:58 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "我是笨笨" 发表:
书上的执行结果是
ls:
This describes the Linux ls command.
cp:
This describes the Linux cp command.

可是我自己的执行结果是
ls command.:
This describes the Linux ls command.
cp command.:
This..........


朋友,如果想要书上的效果需要定义第2个目标。下面的方法可以
sed '/Linux/{h;s/.* Linux \(.*\) \(.*\) /\1:/;p;x;}' command.txt

论坛徽章:
0
9 [报告]
发表于 2005-05-16 18:00 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

honbj兄


我认为1: 不代表linux后的内容,而是()里的内容,我上面的回帖充分说明这点。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
10 [报告]
发表于 2005-05-16 18:55 |只看该作者

这段sed的用法看不懂了,能说说什么意思吗?

原帖由 "我是笨笨" 发表:
书上的执行结果是
ls:
This describes the Linux ls command.
cp:
This describes the Linux cp command.

可是我自己的执行结果是
ls command.:
This describes the Linux ls command.
cp command.:
This..........


sed '/Linux/{h;s/.*■Linux■\(.*\)■.*/\1:/;p;x;}'

注意用■标出的地方代表空格,你一定漏写了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP