余苏明的幻想乡

Chapter 6. Sed Hold and Pattern Space Commands

sed的保留空间和模式空间

  • pattern space(模式空间)相当于车间sed把流内容在这里处理;
  • hold space(保留空间)相当于仓库,加工的半成品在这里临时储存(当然加工完的成品也在这里存储)。

    41. Swap Pattern Space with Hold Space (x command)

    交换H空间和P空间里面的内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [root@localordb sed_test]# sed -e 'x;n' empnametitle.txt
    CEO
    John Doe
    IT Manager
    Jason Smith
    Sysadmin
    Raj Reddy
    Developer
    Anand Ram
    Sales Manager
    [root@localordb sed_test]# cat empnametitle.txt
    John Doe
    CEO
    Jason Smith
    IT Manager
    Raj Reddy
    Sysadmin
    Anand Ram
    Developer
    Jane Miller
    Sales Manager

sed ‘x;N’ employee.txt 步骤分析
sed 'x;N' employee.txt
sed x;N employee.txt

1
2
3
4
5
6
# sed 'x;n' employee.txt
102,Jason Smith,IT Manager
101,John Doe,CEO
104,anand Ram,Developer
103,Raj Reddy,Sysadmin

42. Copy Pattern Space to Hold Space (h command)

拷贝P空间到H空间

1
2
3
# sed -n -e '/Manager/!h' -e '/Manager/{x;p}' empnametitle.txt
Jason Smith
Jane Miller
  • /Manager/!h 不匹配Manager的行拷贝到H空间
  • /Manager/{x;p} 匹配到Manager后,交换H空间的内容,并输出

43. Append Pattern Space to Hold Space (H command)

添加P空间到H空间

44. Copy Hold Space to Pattern Space (g command)

get从H空间复制到P空间

45. Append Hold Space to Pattern Space (G command)

添加P空间到H空间