有这么一个需求,需要从若干个apache虚机配置文件中删除一段内容,类似下面这种
<VirtualHost *>
ServerName abc.com
DocumentRoot /home/apache/abc
CustomLog logs/abc.com-access_log combined
</VirtualHost>
思路:以ServerName为中心,删除上面的一行,再删除从ServerName到</VirtualHost>之间的内容即可。
脚本如下:
#! /bin/sh
# by logo32.iteye.com
# delete domain from *.conf
Dir="/usr/local/apache2/conf"
cd $Dir
ls *.conf | while read file
do
con=`grep 'ServerName abc.com' $file | wc -l`
if [ $con -gt 0 ];then
echo "delete domain in this file : $Dir/$file"
sed -i -e :a -e '$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta' -e 'P;D' $file
sed -i '/ServerName abc.com/,/\/VirtualHost/d' $file
else
echo "======== no change for file : "$file
fi
done
其中最重要的两条语句
1、删除指定行的上一行
sed -i -e :a -e '$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta' -e 'P;D' $file
2、删除指定字符串之间的内容
sed -i '/ServerName abc.com/,/\/VirtualHost/d' $file
分享到:
相关推荐
### Shell 删除指定行上一行 在Shell脚本中,我们经常需要对文本文件进行操作,例如删除、替换或提取特定的行。对于删除指定行及其上一行的需求,可以通过结合使用`sed`命令来实现。根据提供的文件内容,下面将详细...
sed 命令是 Linux shell 中的一个流编辑器,可以用来对文本进行各种处理操作,例如,添加、删除、替换文本中的字符。今天我们将讨论如何使用 sed 命令在文本的行尾或行首添加字符。 添加字符到行首 要添加字符到...
1. **命令模式**:`sed`的工作方式是逐行读取输入流,对每一行应用命令,然后将结果输出。命令通常由动作和模式空间组成,动作定义了要执行的操作,而模式空间是当前正在处理的行。 2. **地址范围**:`sed`命令可以...
- `sed '$d' example`:删除`example`文件的最后一行。 - `sed '/test/d example'`:删除`example`文件中所有包含`test`的行。 ##### 替换(s) 替换命令可以替换文本中的模式。格式为`s/pattern/replacement/...
sed允许用户指定一个脚本,该脚本包含一系列命令,这些命令可以对输入的文本数据进行编辑处理,如插入、删除或替换文本。 本教程旨在介绍sed的基本概念和使用方法,适合初学者快速掌握其基础用法。对于有经验的用户...
- 删除从第二行到最后一行:`sed '2,$d' example`。 - 删除最后一行:`sed '$d' example`。 - 删除包含“test”的所有行:`sed '/test/d' example`。 - 替换所有的“test”为“mytest”:`sed 's/test/mytest/g' ...
- 插入文本:`sed 's/^/插入的文本/g' 文件名`,会在每一行开头插入文本。 除了基本操作,`sed`还支持脚本文件,可以编写一系列命令并在一个命令行中执行,这通常用`-f`选项指定,例如`sed -f script.sed 输入文件`...
用户可以将`sed`的二进制文件解压到一个合适的目录,然后在命令行中通过指定该目录来运行`sed`。 **使用sed的主要场景** 1. **文本替换**:`sed`最基础的功能就是替换文本,例如,用新的字符串替换旧的字符串,...
而sed '1,/^$/d' 则会删除从第一行开始,到第一个空行结束的所有行。 综上所述,sed命令因其强大的文本处理能力,在Linux系统管理与软件开发中扮演着非常重要的角色。通过理解sed的工作机制,如模式空间、保持空间...
1. **替换行尾的逗号**:`sed 's/,$//' file.txt` 去掉每一行末尾的逗号。 2. **批量替换文件中的字符串**:`sed -i 's/old/new/g' file.txt` 在原文件上进行替换,`-i` 表示就地修改。 3. **删除特定行**:`sed '...
例如,`sed '/pattern/d'` 会删除所有包含指定模式的行;`sed -i 's/pattern//g' file` 将在原文件上删除所有匹配的模式。 3. **流编辑**:sed一次性处理整个文件,而不是逐行处理,这使得它能处理大量数据。 4. *...
这里`N`命令读取下一行并附加到模式空间,`s/\n//`删除中间的换行符,`p`打印结果。 **3.3 删除文件中的数据** 删除匹配特定模式的所有行: ``` sed '/pattern/d' input_file ``` **3.4 搜寻文件中的数据** 搜索...
sed的进阶知识点还包括循环和条件处理,如`d`命令删除当前模式空间内容后直接开始下一行处理,而`D`命令则删除直到换行符的所有内容,继续处理剩余的文本。另外,`n`命令可以用来读取下一行内容,`N`命令则用来将下...
- **条件删除**:通过指定行范围来控制命令的作用对象。 - **替换文本**:使用`s/old/new/g`命令全局替换文本。 - **插入文本**:在特定位置前或后插入新的行。 - **附加文本**:在文件末尾追加内容。 通过学习这些...
5. **行地址范围**:`/pattern1/,/pattern2/` 定义一个处理范围,`sed`将在匹配到`pattern1`到`pattern2`之间的所有行上执行命令。 6. **地址范围的增量**:`n,+m` 指定从第n行开始的m行,例如`3,+2` 表示第3行及其...
- d:删除,删除指定行。 - i:插入,在指定行前添加一行或多行。 - p:打印,输出指定行。 - s:取代,对指定行的文本进行替换。 例如,要在文本文件的第四行后添加一行内容,可以使用如下命令: ``` sed -e '4a\...
- `d`命令:删除指定行。 - `2d`:删除文件中的第二行。 - `2,$d`:删除从第二行到文件末尾的所有行。 - `$d`:删除文件的最后一行。 以上是`sed`命令的基本使用和功能,通过组合各种命令和选项,可以实现复杂的...
- **W file** 将模式空间的第一行写入指定文件。 - **!** 指示后续的命令应用于未被选中的行。 - **s/re/string** 用`string`替换正则表达式`re`匹配到的内容。 - **=** 打印当前行号。 - **#** 将注释扩展到下一个...
通过读取输入流(一个文件或管道)中的每一行,`sed`可以对文本进行模式匹配、替换、删除、插入等各种操作,并将处理结果输出到标准输出或重定向到其他文件。`sed`的工作方式是逐行处理输入,使得它非常适合对大量...
- 示例:`sed '2i\new line' file` 在第2行前插入一行文本“new line”。 - **追加文本**:`a`命令用于在当前行之后追加文本。 - 示例:`sed '2a\new line' file` 在第2行后追加一行文本“new line”。 - **删除...