网站建设为什么这么贵,wordpress teamtalk,求一外国h网站,wap网站需要什么服务器介绍
sed 是一种流式文本编辑器#xff0c;常用于在 Unix 和类 Unix 系统中对文本进行处理。它可以将文本从标准输入或文件中读取#xff0c;对其进行修改#xff0c;然后将修改后的文本输出到标准输出或文件中。sed 是 “stream editor” 的缩写。
语法
sed 的基本语法为…介绍
sed 是一种流式文本编辑器常用于在 Unix 和类 Unix 系统中对文本进行处理。它可以将文本从标准输入或文件中读取对其进行修改然后将修改后的文本输出到标准输出或文件中。sed 是 “stream editor” 的缩写。
语法
sed 的基本语法为
sed [options] command [file...]command 是要执行的编辑命令file 是要处理的文件名可以是多个文件也可以使用通配符指定一组文件而 options 则控制 sed 的行为。
选项
sed 常用的一些选项
-n只输出修改后的文本不输出原始文本。-e指定要执行的多个编辑命令。-f指定包含要执行的编辑命令的文件名。-i直接在文件中进行修改而不是将修改后的文本输出到标准输出中。-r启用正则表达式扩展语法。
命令
sed 的编辑命令可以使用单引号或双引号括起来ed 常用的一些编辑命令
s/pattern/replacement/将匹配 pattern 的文本替换为 replacement。d删除匹配的行。p打印匹配的行。a text在匹配行的后面添加一行文本。i text在匹配行的前面添加一行文本。c text用指定的文本替换匹配的行。y/chars1/chars2/将 chars1 中的每个字符替换为 chars2 中相应位置的字符。
示例
我们先准备一个文件名为test做测试内容如下
➜ cat test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test增加内容
使用命令sed -e 3a\newLine testfile这个命令的意思就是在第三行后面追加newLine这么一行字符字符前面要用反斜线作区分。执行完毕之后可以看到结果
➜ sed -e 3a\newline test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
newline
Linux test但是注意这个只是将文字处理了没有写入到文件里文件里还是之前的内容。
其实 a 前面是可以匹配字符串比如我们只想在出现 Linux 的行后面追加就可以sed -e /Linux/a\newline test 两个斜线之间的内容是需要匹配的内容。可以看出只有第二、第四行有Linux所以结果如下
➜ sed -e /Linux/a\newline test
HELLO LINUX!
Linux is a free unix-type opterating system.
newline
This is a linux testfile!
Linux test
newline这里用双引号把整个表达式括起来也可以还方便处理带空格的字符。
sed -e /Linux/a\newline test等效于sed /Linux/a newline test
插入内容
跟 a 类似sed 3i\newline test是在第三行前面插入newline:
➜ sed 3i\newline test
HELLO LINUX!
Linux is a free unix-type opterating system.
newline
This is a linux testfile!
Linux testsed /Linux/i\newline test是在所有匹配到Linux的行前面插入
➜ sed /Linux/i\newline test
HELLO LINUX!
newline
Linux is a free unix-type opterating system.
This is a linux testfile!
newline
Linux test可以看出插入的用法和增加很相似。
删除
删除的字符是d用法跟前面也很相似就不赘述例子如下
➜ sed /Linux/d test
HELLO LINUX!
This is a linux testfile!可以看到删除了匹配到的两行。
替换
替换也是一样字符是c。举个栗子
➜ sed /Linux/c\Windows test
HELLO LINUX!
Windows
This is a linux testfile!
Windows替换还有个字符是 s但是用法由不太一样了最常见的用法sed s/old/new/g其中old代表想要匹配的字符new是想要替换的字符比如
➜ sed s/Linux/Windows/g test
HELLO LINUX!
Windows is a free unix-type opterating system.
This is a linux testfile!
Windows test这里的/g的意思是一行中的每一次匹配因为一行中可能匹配到很多次。我们拿一个新的文本文件做例子
➜ cat test2
aaaaaaaaaaa
bbbbbabbbbb
cccccaacccc假设我们想把一行中的第三次及以后出现的a变成大写A那应该这么写
➜ sed s/a/A/3g test2
aaAAAAAAAAA
bbbbbabbbbb
cccccaacccc可以看出只有第一行的有的改了因为第二第三行没有这么多a出现。
关于s还有很多用法还是回到第一个文件比如可以用/^/和/$/分别代表行首和行尾
➜ sed s/^/###/g test
###HELLO LINUX!
###Linux is a free unix-type opterating system.
###This is a linux testfile!
###Linux test ➜ sed s/$/---/g test
HELLO LINUX! ---
Linux is a free unix-type opterating system. ---
This is a linux testfile! ---
Linux test ---这个其实就是正则表达式的语法其他类似语法还有
^ 表示一行的开头。如/^#/ 以#开头的匹配。$ 表示一行的结尾。如/}$/ 以}结尾的匹配。\ 表示词首。 如\ 表示以 abc 为首的詞。\ 表示词尾。 如abc\ 表示以 abc 結尾的詞。. 表示任何单个字符。* 表示某个字符出现了0次或多次。[ ] 字符集合。 如[abc] 表示匹配a或b或c还有 [a-zA-Z] 表示匹配所有的26个字符。如果其中有^表示反如 [^a] 表示非a的字符
以上的所有用法还可以在字符前面增加行号或者匹配。什么意思呐比如你想在第一和第二行后面增加一行内容newline就是
➜ sed 1,2a\newline test
HELLO LINUX!
newline
Linux is a free unix-type opterating system.
newline
This is a linux testfile!
Linux test其他操作同理。不止可以用数字来限定范围还可以用匹配来限定只需要用//括起来
➜ sed /LINUX/,/linux/i\test test
test
HELLO LINUX!
test
Linux is a free unix-type opterating system.
test
This is a linux testfile!
Linux test这里的意思是从匹配到LINUX的那一行到匹配到linux的那一行也就是 123 这三行
都做插入操作。
多个匹配
用-e命令可以执行多次匹配相当于顺序依次执行两个sed命令
➜ sed -e s/Linux/Windows/g -e s/Windows/Mac OS/g test
HELLO LINUX!
Mac OS is a free unix-type opterating system.
This is a linux testfile!
Mac OS test这个命令其实就是先把Linux替换成Windows再把Windows替换成Mac OS。
写入文件
上面介绍的所有文件操作都支持在缓存中处理然后打印到控制台实际上没有对文件修改。想要保存到原文件的话可以用 file或者-i来保存到文件