shell 脚本 sed 命令总结

本文介绍如何使用SED命令进行文本处理,包括删除特定行、替换文本、使用正则表达式等内容。SED是一款强大的文本编辑工具,可以用来高效地进行文本替换、删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除以a开头的行

1、sed -i '/^a.*/d' temp.txt

-i 表示操作在源文件上生效.否则操作内存中数据,并不写入文件中.

在分号内的/d表示删除匹配的行

2、 删除文件第三行。
sed -i '3d' file.txt 
3、 删除文件中包含"NewBalance"的那行。
sed -i '/NewBalance/d' file.txt

替换匹配行:

sed -i '^a.*/haha/g' temp.txt

分号内的s/表示替换

/g表示全局替换

^ 表示以a开头的行匹配,行前面有空格则不匹配
去掉^号,表示整行匹配

[abc]匹配中括号中的单个字符,如a或b或c
[^abc]匹配除了a、b、c等字符的其他单个字符
[a-z]匹配一个字符范围,如a到z
[a-zA-Z]匹配一个字符范围,如a-z 或 A-Z
^匹配行的开始
$匹配行的结束
\A匹配一个字符串的开始
\z匹配一个字符串的结束
.匹配任意单个字符
\s匹配空白字符,如空格,TAB
\S匹配非空白字符
\d匹配一个数字
\D匹配非数字
\w匹配一个字母
\W匹配非字母
\b匹配字符边界
(...)引用所有括号中的内容
(a|b)a或者b
a?零个或1个a
a*零个或多个a
a+1个或多个a
a{3}3次重复的a
a{3,}3次或3次以上重复的a
a{3,6}3到6次重复的a
修正符
/g查找所有可能的匹配
/i不区分大小写
/m多行匹配
/s单行匹配
/x忽略空白模式
/e可执行模式,PHP专有
/A强制从目标字符串开头匹配
/D使用$限制结尾字符,则不允许结尾有换行
/U只匹配最近的一个字符串;不重复匹配




### 如何在 Shell 脚本中使用 `sed` 命令传参 在 Shell 脚本中,可以通过变量的方式将参数传递给 `sed` 命令。这种方式不仅提高了脚本的灵活性,还使得维护更加方便。以下是关于如何实现这一功能的具体说明。 #### 使用变量作为 `sed` 的参数 可以利用 Shell 变量存储动态数据,并将其嵌入到 `sed` 表达式中。例如: ```bash search="old_text" replace="new_text" file="example.txt" sed -i "s/$search/$replace/g" "$file" ``` 上述代码片段展示了如何通过定义两个变量 `$search` 和 `$replace` 来指定要查找和替换的内容[^1]。这里 `-i` 参数表示直接修改文件内容而不是输出到标准输出流。 #### 处理特殊字符的情况 当待处理字符串可能包含正则表达式的元字符(如 `/`, `.`, `*` 等),需要对其进行转义以免影响正常操作。一种方法是手动添加反斜杠 `\` 进行转义;另一种更通用的方法是在执行前预处理这些输入值: ```bash escape() { echo "$1" | sed -e 's/[\/&]/\\&/g' } search=$(escape "old/text") replace=$(escape "new&text") sed -i "s/$search/$replace/g" example.txt ``` 此部分介绍了如何安全地处理含有特殊字符的数据源[^2]。 #### 结合函数封装逻辑 对于复杂场景下的多次调用需求,可考虑把相关指令打包成独立的功能模块以便重复利用: ```bash update_config() { local key="$1" local value="$2" escaped_key=$(echo "$key" | sed -e 's/[\/&]/\\&/g') escaped_value=$(echo "$value" | sed -e 's/[\/&]/\\&/g') sed -i "/^\($escaped_key\s*=\s*\).*/ s//\1$escaped_value/" config_file.conf } ``` 上面的例子展示了一个名为 `update_config()` 的自定义函数,它接受键名与新值作为参数更新配置文件中的对应项[^3]。 #### 实际案例分析 下面给出一个实际应用例子——更改 SELinux 配置状态: 假设我们需要批量调整服务器上的 SELinux 设置,则可以用如下方式完成自动化部署工作流程的一部分: ```bash #!/bin/bash selinux_status=$1 config_path="/etc/selinux/config" if [[ ! $selinux_status =~ ^(enforcing|permissive|disabled)$ ]]; then echo "Invalid SELinux status provided." exit 1 fi backup_suffix=".bak_$(date +%Y%m%d%H%M%S)" sed -i"$backup_suffix" "s/^SELINUX=.*$/SELINUX=${selinux_status}/" "${config_path}" ``` 该脚本接收命令行第一个参数决定目标主机应采用何种强制级别[^4]。同时为了避免误改原始资料造成不可逆损失,在每次改动之前都会创建时间戳标记的新副本存档。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值