linux sed -i 命令

本文详细介绍了 Linux 下的 sed 命令,包括如何使用 sed 的选项参数进行文本处理,如替换、新增、删除等操作。通过实例演示了 sed 如何修改文件内容,并提供了常见用法的总结。

Linux sed命令是利用script来处理文本文件。

(一)、选项参数

sed -i function

-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 就是啦!

(二)sed -i 直接修改文件内容(危险动作)

sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用文件 regular_express.txt 文件来测试看看吧!

regular_express.txt 文件内容如下:

[root@www ~]# cat regular_express.txt 
runoob.
google.
taobao.
facebook.
zhihu-
weibo-

1、利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# cat regular_express.txt 
runoob!
google!
taobao!
facebook!
zhihu-
weibo-

2、利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test:

[root@www ~]# sed -i '$a # This is a test' regular_express.txt
[root@www ~]# cat regular_express.txt 
runoob!
google!
taobao!
facebook!
zhihu-
weibo-
# This is a test

由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test!

sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

 

(三)sed -i 常见用法(直接对文本文件进行操作的)

替换掉每行的第一个字符串

sed -i 's/原字符串/新字符串/' file

替换掉所有的字符串 sed -i 's/原字符串/新字符串/g' file

去掉 “行首” 带“@”的首字母@

sed -i 's/^@//' file

特定字符串的行前插入新行

sed -i '/特定字符串/i 新行字符串' file

特定字符串的行后插入新行

sed -i '/特定字符串/a 新行字符串' file

特定字符串的删除

sed -i '/字符串/d' file

参考:

http://www.runoob.com/linux/linux-comm-sed.html

https://www.cnblogs.com/ev-zhk/p/4277023.html

<think>我们正在讨论Linux中的sed命令,特别是sed -i选项。用户要求解释其用途和用法,并提供使用示例。 根据引用[1]和[2],sed -i命令用于直接修改文件内容,而不是输出到终端。这对于处理大文件特别有用,因为可以避免使用交互式编辑器(如vim)打开大文件。 引用[3]解释了sed -i和sed -i -e的区别:sed -i直接编辑文件,而sed -i -e后面需要跟一个或多个编辑指令(如替换操作)。 引用[4]则提到了-n选项,但用户的问题主要集中在-i选项上。 因此,我们的回答结构如下: 1. 解释sed -i的作用:直接修改文件,不输出到屏幕。 2. 说明其常见用法,包括使用-e选项来指定编辑命令(但也可以不用,如果只有一个编辑命令的话)。 3. 提供几个常见的使用示例,如替换文件中的字符串、删除某一行等。 4. 注意事项:使用-i时最好先备份(可以使用-i.bak),以免修改错误导致文件损坏。 注意:用户要求使用中文回答,并且按照指定的格式处理数学表达式(但本问题中不涉及数学表达式,所以可以忽略)。 同时,在回答末尾生成相关问题。 示例回答结构: ### sed -i命令的作用 解释作用... ### 基本语法 ``` sed -i [选项] '编辑命令' 文件名 ``` ### 常见用法示例 1. 替换文件中的字符串(例如将"old"替换为"new"): ``` sed -i 's/old/new/g' filename ``` 2. 删除匹配行(例如删除包含"pattern"的行): ``` sed -i '/pattern/d' filename ``` 3. 指定多个编辑命令(使用-e): ``` sed -i -e 's/old/new/g' -e '/pattern/d' filename ``` 4. 备份原文件并修改(修改的同时生成备份文件): ``` sed -i.bak 's/old/new/g' filename # 修改filename,并备份为filename.bak ``` ### 注意事项 - 使用`-i`选项时要小心,因为它会直接修改文件。建议先备份文件或使用`-i.bak`形式进行备份。 - 在Mac OS X系统上,sed -i需要额外指定备份扩展名(即使为空),所以为了跨平台兼容性,可以使用`sed -i '' ...`(但这样不备份)或者明确指定备份扩展名。 ### 相关问题 生成三个相关问题... 现在开始撰写回答。</think>### Linux `sed -i` 命令详解 `sed -i` 是 Linux 中用于**直接修改文件内容**的核心命令,其核心作用是通过正则表达式对文件进行原地编辑(无需手动重定向输出)。以下是详细解析: --- #### 一、核心作用 1. **原地修改文件** `-i` 选项使 `sed` 直接修改源文件(而非仅输出到终端),避免手动重定向[^2]。 ```bash sed -i 's/old/new/g' file.txt # 将 file.txt 中所有 "old" 替换为 "new" ``` 2. **支持复杂编辑** 结合正则表达式实现批量操作,如替换、删除、插入行等[^1][^3]。 --- #### 二、语法与选项 ```bash sed -i [OPTIONS] 'SCRIPT' FILENAME ``` | 选项 | 作用 | |-------------|----------------------------------------------------------------------| | `-i` | 直接修改源文件(危险操作,建议先备份) | | `-i.bak` | 修改前创建备份文件(如 `file.txt.bak`)[^2] | | `-e` | 指定多个编辑指令(需搭配 `-i`)[^3] | | `-n` | 仅显示处理后的行(静默模式)[^1][^4] | --- #### 三、经典使用示例 1. **全局替换文本** ```bash sed -i 's/apple/orange/g' fruits.txt # 将文件中所有 "apple" 替换为 "orange" ``` 2. **删除匹配行** ```bash sed -i '/error/d' log.txt # 删除所有包含 "error" 的行 ``` 3. **多指令编辑(`-e`)** ```bash sed -i -e 's/foo/bar/g' -e '/baz/d' data.txt # 替换 "foo" 并删除含 "baz" 的行[^3] ``` 4. **备份后修改(安全做法)** ```bash sed -i.bak 's/old/new/' config.cfg # 生成 config.cfg.bak 并修改原文件 ``` --- #### 四、注意事项 1. **权限问题**:需确保对目标文件有写权限。 2. **备份习惯**:始终用 `-i.bak` 避免数据丢失。 3. **正则转义**:特殊字符(如 `/`、`*`)需用 `\` 转义(例:`s/\/path/\/new_path/`)。 --- ### 相关问题 1. `sed` 命令如何实现跨文件批量替换? 2. 如何用 `sed` 在特定行插入文本? 3. `sed` 与 `awk` 在文本处理中的主要区别是什么? > 引用说明:`-i` 原地修改特性适用于大文件处理[^2],`-e` 支持多指令组合操作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值