Chinaunix

标题: 【已解决】请教sed中的x的困惑 [打印本页]

作者: 20032007    时间: 2016-05-10 14:56
标题: 【已解决】请教sed中的x的困惑
本帖最后由 20032007 于 2016-05-10 15:24 编辑

我有很多个文本,里边有这样的内容:
  1. aaa. ABC:
  2. aaa. bbc:
  3. aaa. ccc:
复制代码
我想在所有的aaa行之前(或者之后)新增一行,变成:
  1. bbb. ABC:
  2. aaa. ABC:
  3. bbb. bbc:
  4. aaa. bbc:
  5. bbb. ccc:
  6. aaa. ccc:
复制代码
在高手和搜索引擎的帮助下,我用了如下语句:
  1. sed 'h;s\aaa\bbb\g;x;G;' file
复制代码
从sed和awk 101 hacks里查到,
h把模式空间复制到保持空间
x用保持空间替换模式空间
G把保持空间追加到模式空间

我困惑这里的x起到了什么作用,然后用:
  1. sed 'h;s\aaa\bbb\g;G;' file
复制代码
试验了一下,发觉和上一条语句的效果是一样的,就更困惑了,这里的x起到什么作用?为什么有x和没有x效果是一样的?

请高手不吝指教....

多谢。

作者: haooooaaa    时间: 2016-05-10 15:11
本帖最后由 haooooaaa 于 2016-05-10 15:15 编辑

怎么是一样呢?

不是顺序不一样吗?

h;                ==> aaa. ABC:  Hold Space
s/aaa/bbb/    ==> bbb. ABC:  Pattern Space
x                  ==> aaa. ABC:  Pattern Space
                           bbb. ABC:  Hold Space
G                 ==> aaa. ABC:\nbbb. ABC
作者: 20032007    时间: 2016-05-10 15:23
haooooaaa 发表于 2016-05-10 15:11
怎么是一样呢?

不是顺序不一样吗?


原来x是交换,sed and awk 101 hacks里标题写的是x是用保持空间替换模式空间,没认真看内容

x是交换而不是替换!!!

多谢您的帮助。
作者: jcdiy0601    时间: 2016-05-11 09:31
sed -r '/aaa/s/(.*)(\..*)/bbb\2\n\1\2/' file
bbb. ABC:
aaa. ABC:
bbb. bbc:
aaa. bbc:
bbb. ccc:
aaa. ccc:





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2