sed
- 搜索和替换¶
sed
是一个命令,代表“流编辑器”。
约定¶
path
: 实际路径。例如:/var/www/html/
filename
: 实际文件名。例如:index.php
使用 sed
¶
使用 sed
进行搜索和替换是我的个人偏好,因为你可以使用你选择的定界符,这使得用“/”替换诸如 Web 链接之类的东西非常方便。sed
用于就地编辑的默认示例显示了如下示例
sed -i 's/search_for/replace_with/g' /path/filename
但是,如果你要搜索包含“/”的字符串怎么办?如果正斜杠是唯一可用的定界符?您将不得不转义每个正斜杠才能在搜索中使用它。这就是 sed
胜过其他工具的地方,因为定界符可以在运行时更改(无需在任何地方指定您正在更改它)。如上所述,如果你要查找包含“/”的内容,你可以通过将定界符更改为“|”来做到这一点。以下是如何使用此方法查找链接的示例
sed -i 's|search_for/with_slash|replace_string|g' /path/filename
您可以使用任何单字节字符作为定界符,但反斜杠、换行符和“s”除外。例如,这也行得通
sed -i 'sasearch_forawith_slashareplace_stringag' /path/filename
,其中“a”是定界符,搜索和替换仍然有效。为了安全起见,您可以在搜索和替换时指定备份,这对于确保您使用 sed
进行的更改是您真正想要的非常有用。这为您提供了一个从备份文件进行恢复的选项
sed -i.bak s|search_for|replacea_with|g /path/filename
这将创建一个名为 filename.bak
的未编辑版本的 filename
您也可以使用完整的引号而不是单引号
sed -i "s|search_for/with_slash|replace_string|g" /path/filename
选项说明¶
选项 | 说明 |
---|---|
i | 就地编辑文件 |
i.ext | 使用任何扩展名 (ext 在此处) 创建备份 |
s | 指定搜索 |
g | 指定全局替换,或所有出现 |
多个文件¶
不幸的是,sed
没有像 perl
那样提供内联循环选项。要循环遍历多个文件,您需要将您的 sed
命令组合到一个脚本中。以下是执行此操作的示例。
首先,生成您的脚本将使用的文件列表。在命令行使用以下命令
find /var/www/html -name "*.php" > phpfiles.txt
接下来,创建一个脚本使用此 phpfiles.txt
#!/bin/bash
for file in `cat phpfiles.txt`
do
sed -i.bak 's|search_for/with_slash|replace_string|g' $file
done
该脚本循环遍历 phpfiles.txt
中创建的所有文件,为每个文件创建备份,并全局执行搜索和替换字符串。当您验证更改是您想要的更改时,您可以删除所有备份文件。
其他阅读和示例¶
sed
手册页sed
其他示例sed
&awk
O'Reilly 图书
结论¶
sed
是一个强大的工具,非常适合搜索和替换功能,尤其是在需要灵活的定界符时。
作者: Steven Spencer