sed 常见用法

sed 常见用法

(1)添加注释

sed -i 's/^\(77\)/# \1/' /tmp/abc/test.txt

 

注释掉指定行:

sed -e '2,3{s/^/#/}' test.txt

 说明:注释掉第2行和第三行

 

删除c语言的注释(//)

sed -e 's/\/\/\(.*\)/\1/g' fenzhifa.c

 

 

(2)删除注释

sed -i 's/^#[[:space:]]*//'  /tmp/abc/test.txt

 

 

(3)获取脚本所在目录

shell脚本文件名称:loc.sh

内容:

#!/bin/sh

#---------------------------- locate this_dir ----------------start
## this file path
this_dir=`pwd`
dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
    this_dir=`dirname $0`
else
        dirname $0 | grep "^\.$" >/dev/null
        if [ $? -ne 0 ];then
                this_dir=`dirname $0|sed "s#^#${this_dir}/#"`
        fi
fi
echo $this_dir
#---------------------------- locate this_dir ----------------end

 执行:

ctier@allinone-yunyingyong-2-v-o:/tmp/abc/ccc$ ./loc.sh 

/tmp/abc/ccc

 

(4)在键值对后面增加export

sed -e "s#\(.*\)=.*#&\nexport \1#" prop.txt

 prop.txt的内容如下:

name=whuang

age=27

 

运行结果:

ctier@allinone-yunyingyong-chanjet02-v-o:/tmp/abc$ sed -e "s#\(.*\)=.*#&\nexport \1#" prop.txt 

name=whuang

export name

age=27

export age

 

对于path变量

ctier@allinone-yunyingyong-chanjet02-v-o:/tmp/abc$ sed "s#\(.*\)=\(.*\)#if [ x\"$\1\" = x ];then\n\t&\nelse\n\t&:\"$\1\"\nfi\nexport \1#" prop.txt 

if [ x"$name" = x ];then

name=whuang

else

name=whuang:"$name"

fi

export name

if [ x"$age" = x ];then

age=27

else

age=27:"$age"

fi

export age



 

 

 

(5)解决中标麒麟注册服务失败的问题

#!/bin/sh

if [ `id -u` -ne 0 ];then

         echo "Please rerun this script as root ."

         exit 2

fi

if [ -z "$1"  ];then

    echo "please specify patch path:"

         exit 2

fi

 

#-------------------------------- function start ------------------------------------------

delete_Required_Start()

{

         filePath="$1"

         if [ -f "$filePath" ];then

                   sed -i '2,10{/Required-Start/d;}'  "$filePath"

                   sed -i '2,10{/Required-Stop/d;}'  "$filePath"

         fi

}

#-------------------------------- function end ------------------------------------------

 

 

this_dir=`pwd`

patch_path="$1"

ls "$patch_path/patch.sh" >/dev/null 2>&1

if [ $? -eq 0 ];then

         patch_path="$patch_path/patch"

fi

server_bin="$patch_path/patch/build/SERVER/bin"

tomcat_bin="$patch_path/patch/build/STOOLS/tomcat/bin"

cd "$server_bin"

for ii in `ls *7d`;do

         delete_Required_Start "$ii"

done

 

cd "$tomcat_bin"

for ii in `ls *7d`;do

         delete_Required_Start "$ii"

done

 

sed -i 's/log_warning_message\([ ]*(\)/log_warning_msg\1/' /lib/lsb/init-functions

 

cd "$this_dir"

 

 

<think>好的,我现在需要帮用户总结sed命令的用法和功能,并且提供实例。用户可能已经了解了一些基本命令,比如awk和scp,现在想深入学习sed。首先,我应该回顾自己关于sed的知识,确保信息准确。 首先,sed是流编辑器,主要用于文本处理,比如替换、删除、插入等操作。它按行处理输入,可以配合正则表达式,这点和awk类似,但sed更专注于编辑。用户可能想知道基本语法、常用选项和实际例子。 基本语法是`sed [选项] '命令' 输入文件`。需要解释选项,比如-n抑制默认输出,-e允许多个命令,-i直接修改文件。然后,常用的命令如s替换、d删除、p打印、a/i/c添加行等。每个命令都需要例子说明。 接下来是功能总结,比如替换文本、删除行、插入和追加、行替换、打印特定行、使用正则表达式、范围操作等。每个功能都要有实例,比如替换命令s的用法,删除空行,在行后追加文本等。 还要注意用户可能需要的实际应用场景,比如批量替换文件中的字符串,处理日志文件,或者自动化脚本中的文本处理。需要确保例子覆盖这些场景,帮助用户理解如何应用。 同时,用户提供的引用中有关于awk和模式匹配的例子,可能用户对正则表达式有一定了解,所以可以强调sed中正则的使用。比如替换以开头的行,或者处理特定模式的范围。 最后,生成相关问题,帮助用户进一步学习,比如sed和awk的区别,高级用法常见错误处理等。这些问题需要贴合用户可能遇到的后续疑问。 检查是否有遗漏,比如sed的保持空间和模式空间,但可能用户只需要基础用法,所以先不深入。确保每个例子正确,语法正确,比如替换命令中的分隔符可以用/或者其他字符,需要说明。另外,-i选项的危险性需要提醒,避免数据丢失。 总结结构:先概述sed,然后基本语法和选项,详细命令和实例,功能总结,最后相关问题。确保用中文,行内公式正确(虽然这里可能用不上),独立公式单独成段,但sed命令较多代码块,需要用代码块展示例子。 现在开始组织内容,确保清晰易懂,实例实用,覆盖主要功能点。</think>### sed命令用法及功能总结 sed(Stream Editor)是Linux系统中基于行的流编辑器,主要用于文本替换、删除、插入等操作。其核心特点是通过正则表达式匹配模式处理文本流,适用于批量编辑或自动化脚本。 --- #### 一、基本语法与选项 基本命令格式: ```bash sed [选项] '命令' 输入文件 ``` 常用选项: - `-n`:抑制默认输出(需配合`p`命令显式打印) - `-e`:允许多个编辑命令串联,如 `sed -e 's/a/A/' -e 's/b/B/'` - `-i`:直接修改文件内容(**慎用**,建议先测试再使用) - `-r`:启用扩展正则表达式(简化语法) --- #### 二、常用命令与实例 1. **替换文本** ```bash sed 's/原字符串/新字符串/[修饰符]' 文件名 ``` - 实例:替换文件中的`hello`为`HELLO`(默认仅替换每行第一个匹配项) ```bash sed 's/hello/HELLO/' test.txt ``` - 全局替换(添加修饰符`g`): ```bash sed 's/hello/HELLO/g' test.txt ``` - 指定行替换(如第2行): ```bash sed '2s/hello/HELLO/' test.txt ``` 2. **删除行** ```bash sed '行范围d' 文件名 ``` - 实例:删除第3行 ```bash sed '3d' test.txt ``` - 删除空行: ```bash sed '/^$/d' test.txt ``` 3. **插入与追加行** - **插入**(在指定行前插入):`i\` ```bash sed '2i\插入内容' test.txt ``` - **追加**(在指定行后追加):`a\` ```bash sed '/pattern/a\追加内容' test.txt ``` 4. **行替换** ```bash sed '行范围c\新内容' 文件名 ``` - 实例:将第5行替换为`New Line` ```bash sed '5c\New Line' test.txt ``` 5. **打印特定行** ```bash sed -n '行范围p' 文件名 ``` - 实例:打印第10-20行 ```bash sed -n '10,20p' test.txt ``` --- #### 三、进阶功能 1. **正则表达式匹配** - 替换以`http://`开头的行: ```bash sed 's/^http:\/\//https:\/\//' urls.txt ``` - 删除包含`error`的行: ```bash sed '/error/d' log.txt ``` 2. **范围操作** - 在`start`和`end`标记之间删除内容: ```bash sed '/start/,/end/d' config.txt ``` 3. **引用匹配内容** - 使用`&`引用整个匹配项,或`\1`引用分组: ```bash sed 's/[0-9]\+/(&)/' data.txt # 将数字用括号包裹 ``` --- #### 四、综合实例 1. **批量替换文件扩展名** ```bash ls *.txt | sed 's/\.txt$/.bak/' | xargs -I{} mv {}.txt {} ``` 2. **提取XML标签内容** ```bash sed -n 's/<title>\(.*\)<\/title>/\1/p' webpage.html ``` 3. **过滤日志时间范围** ```bash sed -n '/2023-10-01 08:00:00/,/2023-10-01 09:00:00/p' app.log ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值