最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

04-Sed操作参数

来源:博客园

1 Sed操作参数

1.1 s--替换

s表示替换(substitute)文件内的字符串。

[address1],[address2]s/pattern/replacement/[flag]# s/pattern/replacement/[flag]# pattern--是regular expression(正则表达式)字符串。表示文件中要被替换的字符串。# replacement:一般字符串

注意:


(资料图)

  1. replacement中出现一些字符有特殊意义
# &--表示其前面pattern字符串# 下面的例子中&表示前面的pattern,就是test# 结果是将test替换为test my carsed -e "s/test/& my car/" file# 使用()进行分组,在使用()和[]的时候需要加\   \(\) # \n--表示第n组,第几个\(xxx\)中间的内容# 结果是将test my car 替换为[my car test]sed -e "s/\(test\)\(my\)\(car\)/\[\2\3\1\]/" file
  • \1--表示test
  • \2--表示my
  • \3--表示car
  • ( \)--\的作用是还原特殊字符的含义
  • \ -- 用在语句最后表示换行
  • flag--用于控制一些替换的情况
flag含义
g替换所有的匹配字符
m(十进制数)替换行内第m个合适字符串
p替换第一个匹配字符串后,将数据标准输出
w wfile替换第一个匹配字符串后,输出到wfile文档中,wfile不存在会进行创建
不存在替换行内第一个字符串

例1

替换input.dat中1996字符串替换为1997,同时将这些数据存入ycar97.dat

sed -e "s/1996/1997w ycar97.dat" input.dat

1.2 d

参数d表示删除数据行

[address1],[address2]d
  • 参数d最多有两个地址进行配合执行
  • 将pattern space内匹配的数据进行删除,将下一行数据进行读入pattern space

1.3 a

参数a表示将数据添加到文件中。

[address1]a\使用者所输入的数据
  • a--最多于一个地址参数配合使用
  • --表示此行结束,用户输入的数据从下一行开始,如果数据超过一行,每行的结尾加 \
  • 当pattern space内数据输出后,sed跟着输出使用者所输入的数据

例1

添加“多任务操作系统”在含有Unix字符串的数据行后

sed -e "/Unix/a \多任务操作系统"input.dat

1.4 i

参数 i 表示将数据插入到文件中

[address1]i\使用者所输入的数据
  • i--最多与一个地址参数配合。
  • -- 表示当前行结束
  • 在pattern space内输出之前,sed先输出使用者所输入的数据

例1

将“文章版权属于中央研究院”,插入到input.dat文档中“院长:xxx”的数据行之前

sed -e "/院长:xxx/i\文章版权属于中央研究院" input.dat

1.5 c

参数c表示改变(change)文件中的数据

[address1],[address2]c\ 使用者所输入的数据
  • sed在进行pattern space内数据输出时,sed改变他成为使用者所输入的数据

1.6 p

参数p表示打印数据

[address1],[address2]p
  • sed执行打印动作--sed拷贝一份pattern space内容至标准输出文档

1.7 l

参数l,除了可以将文件中nonprinting character(不可打印字符退格、另起一行、报警)以ascii码列出,其余均与参数p的作用相同。

例1

将input.dat文档中的^[以ascii码的方式印出

# 原文The Great ^[is a movie starring Steve McQueen.sed -e "l" input.dat#输出The Great \003 is a movie starring Steve McQueen. The Great  is a movie starring Steve McQueen.

1.8 r

参数r表示读入(read)其他文档的内容到当前文档中

[address1]r 其他文件名
  • r与其他文档之间只能有一个空格
  • sed在pattern space中的数据输出后,sed读出其他文档的内容跟着进行输出。当其他文档的内容不存在时,sed照样执行其他指令而不会产生任何错误信息。

1.9 w

参数w表示将文档的内容写到(write)其他文档中

[address1],[address2]w 其他文档名
  • w与其他文档名之间只有一个空格
  • 将pattern space内资料写到其他文件内,数据写如时。会overwrite原来文档中的内容。当其他文档不存在的时候,sed会create文档。

1.10 y

参数y表示转换数据中的字符

[address,[address2]]y/xyz..../abc.....
  • x,y,z,a,b,c表示某些字符为y的参数
  • x,y,z与a,b,c的个数必须相同
  • sed将pattern space中数据内的a字符转变为x,b-->y,c-->z.....

例1

将input.dat文件中的小写cba字母改写为大写CBA

sed -e "y/cba/CBA"

1.11 !

参数!表示不执行函数参数操作

[address,[address]] !函数参数# 删除,除了含1996字符串外所有的行sed -e "/1996/!d" input.dat

1.12 n

参数n表示读入下一行资料

[address,[address]]n
  • 输出pattern space中数据,将下一笔资料读入到pattern space,执行下一个编辑命令。

例1

输出input.dat文件中偶数行资料。

#--------------------input.dat中的内容如下The UNIXOperationSystem#--------------------set -n -e "n" -e "p" input.dat#resultUNIXSystem
  • -n表示将输出控制权转到使用指令进行控制
  • 开始读入第一行(会覆盖第一行),通过n参数读入第二行,p参数输出第2行

关键词: 操作参数 数据输出 多任务操作