Linux sed 的多个用法
sed
是 Linux 和类 Unix 系统中非常强大的文本流编辑器,它可以对文本进行替换、删除、插入、查找等多种操作。下面列出了 sed
常见的多种用法。
1. 基本替换
最常见的 sed
用法是进行文本替换。它使用以下语法:
sed 's/old-text/new-text/' filename
s
表示替换操作。old-text
是要被替换的文本。new-text
是替换后的文本。
示例:将文件 file.txt
中的 apple
替换成 orange
:
sed 's/apple/orange/' file.txt
2. 全局替换
默认情况下,sed
只会替换每一行中的第一个匹配项。如果要替换每一行中的所有匹配项,可以使用 g
标志(代表 global):
sed 's/old-text/new-text/g' filename
示例:将 apple
替换为 orange
,替换每一行中的所有 apple
:
sed 's/apple/orange/g' file.txt
3. 替换并输出到文件
默认情况下,sed
会将结果输出到标准输出(即终端)。如果要将修改后的内容直接写回文件,可以使用 -i
(in-place)选项:
sed -i 's/old-text/new-text/g' filename
示例:将文件 file.txt
中所有的 apple
替换为 orange
并直接保存:
sed -i 's/apple/orange/g' file.txt
- 如果要创建一个备份文件(比如以
.bak
为扩展名),可以加上一个备份扩展名:sed -i.bak 's/apple/orange/g' file.txt
这将创建file.txt.bak
作为备份,并在file.txt
中进行替换。
4. 替换时使用正则表达式
sed
支持使用正则表达式(RE)来匹配和替换文本。您可以使用更复杂的模式进行替换。
示例:替换行首的 foo
为 bar
:
sed 's/^foo/bar/' file.txt
示例:替换行尾的 foo
为 bar
:
sed 's/foo$/bar/' file.txt
5. 删除行
sed
也可以删除文件中的行。要删除特定的行,可以使用 d
命令:
-
删除第 3 行:
sed '3d' file.txt
-
删除包含特定文本的所有行:
sed '/pattern/d' file.txt
例如,删除包含
apple
的所有行:sed '/apple/d' file.txt
-
删除范围内的行:
sed '2,5d' file.txt
这会删除第 2 行到第 5 行的所有内容。
6. 打印指定行
sed
默认会打印所有的行,但你也可以使用 p
命令仅打印特定的行。
-
打印第 2 行:
sed -n '2p' file.txt
-
打印匹配某个模式的行:
sed -n '/pattern/p' file.txt
-
打印第 2 到第 5 行:
sed -n '2,5p' file.txt
7. 替换并在替换文本中使用反向引用
使用反向引用可以在替换文本中使用匹配的模式。
示例:将匹配到的电话号码格式从 123-456-7890
转换为 123.456.7890
:
sed 's/\([0-9]\{3\}\)-\([0-9]\{3\}\)-\([0-9]\{4\}\)/\1.\2.\3/' file.txt
\([0-9]\{3\}\)
表示匹配 3 个数字,并将其捕获为一个组。\1
表示引用第一个捕获组(即前三个数字)。
8. 多重命令
sed
支持在单个命令中执行多个操作,通过分号(;
)分隔每个操作。
示例:删除第 3 行并替换第 2 行的 apple
为 orange
:
sed '3d; 2s/apple/orange/' file.txt
如果要执行更多命令,可以使用 -e
选项:
sed -e '3d' -e '2s/apple/orange/' file.txt
9. 使用正则表达式替换并保存输出
使用 sed
的正则表达式替换功能时,您也可以利用捕获组(Parentheses)来处理更复杂的替换。
示例:将 abc123def
替换为 abc-123-def
,需要在替换字符串中加入分隔符:
sed 's/\([a-z]*\)\([0-9]*\)\([a-z]*\)/\1-\2-\3/' file.txt
这会将文本格式 abc123def
转换为 abc-123-def
。
10. 行号修改
你可以使用 =
命令在输出中显示每一行的行号:
sed '=' file.txt
这将输出每一行前面带上行号。
11. 文本插入和追加
使用 sed
可以在特定位置插入或追加文本。
-
在第 2 行之后插入文本:
sed '2a\This is a new line.' file.txt
-
在第 3 行之前插入文本:
sed '3i\This is a new line.' file.txt
12. 替换带有多行的文本
sed
默认处理的是单行文本,但你可以使用 N
命令将多行内容合并到模式空间,从而进行跨行操作。
示例:将两个连续的行合并成一行:
sed 'N;s/\n/ /' file.txt
这会将每对连续行合并成一行,用空格分隔。
总结
sed
是非常灵活和强大的文本处理工具,可以进行文本替换、删除、插入、打印、合并等各种操作。常见的用法包括:
- 基本替换和全局替换
- 删除行和打印行
- 使用正则表达式进行复杂匹配
- 修改文件内容并保存
- 插入和追加文本
- 使用反向引用和捕获组
通过熟练掌握这些基本用法,可以大大提高文本处理的效率。
原文地址:https://blog.csdn.net/m0_58223765/article/details/143744298
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!