sed常用指令与基本操作学习(一)

sed 流编辑器
暂时用windows中,cmd是没有sed,grep和awk的,需要自行去安装,安装好后把目录加到环境变量下去cmd就能用了。
在这里插入图片描述

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
$ cat pets.txt
This is my cat
  my cat's name is betty
This is my dog
  my dog's name is frank
This is my fish
  my fish's name is george
This is my goat
  my goat's name is adam

替换

sed “s/my/HY’s/g” 1.txt
拆解一下。s是 substitute 替换,是sed里最重要的一个。用法是 s/regexp/replacement/flags,如这里的s/my/HY’s/g,regexp是正则,replacement是匹配到后替换的字符串,flags

文件内容并没有改变,只是会把替换后的内容输出在界面,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

一些常用的正则如下:
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
< 表示词首。 如:<abc 表示以 abc 为首的詞。
> 表示词尾。 如:abc> 表示以 abc 結尾的詞。
. 表示任何单个字符。 * 表示某个字符出现了0次或多次。
[ ] 字符集合。 如:[abc] 表示匹配a或b或c,还有 [a-zA-Z] 表示匹配所有的26个字符。如果其中有^表示反,如 [^a] 表示非a的字符。

结合一些正则表达式,可以进行很方便的进行文本处理工作。例如我有一个服务器里的python文件,ide不太好远程编辑,服务器端只能用vim。里面的代码都废了,想全部注释掉,你就可以在所有行前面加上#号。

 sed 's/^/ #  /g' 1.py

假如是不小心手滑编辑错了,还重定向回原文件里,怎么办?Linux系统是没有回滚或Undo的机制的,如果你有一个文件处理,最好把结果重定向到其他文件里,这样原文件就不会改变,亦或者对一个文件做一个backup(cp file file.bak)。
sed ‘3s/^/ # /g’ 1.py 在s前面加入行数,如3,表示只替换第三行的内容;如果是多行则是:sed “3,6s/my/your/g” pets.txt 美元符号$表示最后一行

sed ’1,2d’  exm.txt

将exm.txt的文本内容删除掉1、2行,把剩下的内容输出至终端(源文件不变化)

正则匹配这里操作都比较复杂,我自己写正则从来都是现学现卖,就不多提这些了,还是主要看sed和参数

替换

c 命令是替换匹配行

$ sed "/fish/c This is my monkey, my monkey's name is wukong" my.txt
This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my monkey, my monkey's name is wukong
This is my goat, my goat's name is adam

d命令
删除匹配行
a命令和i命令
a命令就是append, i命令就是insert,它们是用来添加行的。

p命令
打印命令

你可以把这个命令当成grep式的命令

猜你喜欢

转载自blog.csdn.net/qq_38339832/article/details/109161033