sed基础


-n 不加会打印全文 -n不让打印全文 屏蔽默认输出 3p第三行 行:横起的




数据定位









ens33我用的dhcp配置的 右斜线屏蔽,防止报错













c 以行为单位替换 s 以关键词为单位替换

这个错误是因为 sed 的替换命令格式不正确,具体来说是 替换操作的分隔符没有正确终止。
1. sed 替换命令的语法规则
sed 的替换命令格式为:
sed 's/模式/替换内容/标志' 文件名
s表示“替换”操作;- 第一个
/是模式和替换内容的分隔符(也可以用#、@等符号代替,只要前后一致); - 中间的
模式是要匹配的内容,替换内容是替换后的结果; - 最后的
/用来终止替换内容,后面还可以跟标志(比如g表示全局替换)。
2. 分析你的命令哪里错了
你的命令是:
sed 's/2046/xxxx' test.txt
- 格式上,
s/2046/xxxx只有 两个/:- 第一个
/分隔“模式”(2046)和“替换内容”(xxxx); - 但 缺少第三个
/来终止替换内容,导致sed无法识别命令的结束位置,因此报错 “未终止的's'命令”。
- 第一个
3. 正确的写法
补充最后一个 / 即可:
sed 's/2046/xxxx/' test.txt
- 如果需要全局替换(每行的所有匹配都替换,而不是只替换第一个),可以加
g标志:sed 's/2046/xxxx/g' test.txt
额外知识:分隔符可以自定义
如果模式或替换内容里本身有 /,为了避免冲突,可以换其他分隔符(比如 #):
# 用 # 作为分隔符,避免和 URL 里的 / 冲突
sed 's#http://old#https://new#' test.txt
只要三个分隔符一致即可(开头 s 后的分隔符、模式和替换的分隔符、终止符必须相同)。



















案例集












使用 https://www.tmooc.cn 下载 网站源代码





要解释这条 sed 命令,我们可以拆解为 选项、地址、替换规则 三部分分析:
1. 命令结构回顾
sed -i '1s/^.*$/<?xml version="1.0" encoding="UTF-8"?>/' tmp.txt
sed 是 流编辑器,用于批量处理文本内容。格式为:
sed [选项] '地址+操作' 文件名
2. 逐部分解析
(1)选项 -i
- 作用:直接修改文件内容(
in-place编辑),而非仅输出到终端。 - 风险:会覆盖原文件!建议先测试(比如去掉
-i,查看输出是否符合预期,再修改文件)。
(2)地址 1
- 含义:指定对 第1行 进行操作(
sed中地址可以是行号、正则等,这里1代表第一行)。
(3)替换操作 s/^.*$/<?xml version="1.0" encoding="UTF-8"?>/
这是 sed 的 替换命令,格式为 s/正则表达式/替换内容/:
-
^.*$:正则表达式,匹配 整行内容:^:行的开头;.*:任意字符(除换行)重复 0 次或多次(即“任意内容”);$:行的结尾。
合起来,^.*$会匹配 一行的全部内容(无论该行原本是什么,包括空行)。
-
<?xml version="1.0" encoding="UTF-8"?>:替换后的内容,是 XML 文件的标准声明行。
3. 整体效果
这条命令会:
- 找到
tmp.txt文件的 第一行; - 不管该行原来是什么内容(甚至是空行),都替换为
<?xml version="1.0" encoding="UTF-8"?>; - 直接修改
tmp.txt文件(因-i选项)。
扩展思考
- 如果想 备份原文件(避免误操作),可加后缀:
sed -i.bak '...' tmp.txt,会生成tmp.txt.bak备份。 - 如果文件 没有第一行(空文件),执行后会 插入 这一行(因为
1s会匹配“空的第一行”并替换)。 - 若只想替换 非空的第一行,可调整正则为
^.+$(+表示至少1个字符)。
理解后,就能灵活用 sed 批量修改文本啦!
sed -i 's/.*src="//' tmp2.txt 具体解释
这条 sed 命令的作用是 删除文件中每行里“第一个 src=" 及其之前的所有内容”,我们逐部分解析:
1. 命令结构拆解
sed -i 's/.*src="//' tmp2.txt
遵循 sed 基本格式:sed [选项] '操作' 文件名
2. 各部分含义
(1)选项 -i
- 与之前解释的一致,代表 “原地编辑”(in-place),直接修改
tmp2.txt文件内容,而非仅输出到终端。 - 注意:此操作会直接覆盖原文件,建议先去掉
-i测试输出(如sed 's/.*src="//' tmp2.txt),确认效果后再执行修改。
(2)核心操作 s/.*src="//
这是 sed 的替换命令,格式为 s/匹配模式/替换内容/(此处替换内容为空,即删除匹配到的部分)。
-
匹配模式
.*src=":.*:正则表达式中,.代表“任意单个字符”,*代表“前面的字符重复 0 次或多次”,合起来.*表示“任意字符组成的任意长度内容”(从行首开始匹配)。src=":固定字符串,即我们要定位的目标文本。- 整体
.*src="表示:从行首开始,匹配所有字符,直到遇到第一个src="(包括src="本身)。
-
替换内容为空:
由于//中间没有任何内容,意味着将匹配到的.*src="这部分直接删除。
(3)文件 tmp2.txt
表示要处理的目标文件。
3. 实际效果举例
假设 tmp2.txt 中有一行内容:
<div class="img-box">src="logo.png" alt="logo"</div>
执行命令后,这行会变成:
logo.png" alt="logo"</div>
(原行中“从开头到 src="”的部分 <div class="img-box">src=" 被删除了)
注意点
- 只处理 每行第一个出现的
src=":sed的替换默认只匹配每行的第一个符合条件的内容,若一行中有多个src=",只会删除第一个之前的内容。 - 若行中没有
src=":该行不会被修改,保持原样。
通过这个命令,可以快速提取 src=" 后面的内容(如图片路径、链接等)。


sed -i 's/".*//' tmp2.txt
这条 sed 命令的作用是 删除文件中每行里“第一个双引号 "" 及其之后的所有内容”,仅保留双引号之前的部分。我们逐部分解析:
1. 命令结构拆解
sed -i 's/".*//' tmp2.txt
遵循 sed 基本格式:sed [选项] '替换操作' 目标文件
2. 各部分含义
(1)选项 -i
- 与之前的命令一致,代表 “原地编辑”(in-place),直接修改
tmp2.txt的内容(而非仅输出到终端)。 - 注意:此操作会直接覆盖原文件,建议先去掉
-i测试效果(如sed 's/".*//' tmp2.txt),确认无误后再执行修改。
(2)核心替换操作 s/".*//
这是 sed 的替换命令,格式为 s/匹配模式/替换内容/(此处替换内容为空,即删除匹配到的部分)。
-
匹配模式
".*:":表示匹配 第一个双引号(注意是英文双引号)。.*:正则表达式中,.代表“任意单个字符”,*代表“前面的字符重复 0 次或多次”,合起来.*表示“双引号后面的所有内容”(无论是什么字符,直到行尾)。- 整体
".*表示:从行中第一个双引号开始,包括这个双引号,以及它后面的所有字符。
-
替换内容为空:
由于//中间没有任何内容,意味着将匹配到的".*这部分直接删除。
(3)文件 tmp2.txt
表示要处理的目标文件。
3. 实际效果举例
假设 tmp2.txt 中有以下内容:
logo.png" alt="logo" class="img"
https://example.com" target="_blank
hello"world"test
执行命令后,内容会变成:
logo.png
https://example.com
hello
- 第一行:删除了第一个
"及其后的alt="logo" class="img",仅剩logo.png。 - 第二行:删除了第一个
"及其后的target="_blank,仅剩https://example.com。 - 第三行:只删除第一个
"及其后的world"test(注意:即使后面还有其他双引号,也只处理第一个),仅剩hello。
注意点
- 只处理 每行第一个双引号:
sed替换默认只匹配每行的第一个符合条件的内容,若一行有多个双引号,仅删除第一个及其后的所有内容。 - 若行中没有双引号:该行不会被修改,保持原样。
通过这个命令,可以快速提取文本中“第一个双引号之前的内容”(例如从带引号的字符串中提取前缀)。

修改








浙公网安备 33010602011771号