Linux之sed命令(包含MacOS的用法)
作者:minh_coo
文章介绍了Linux下的sed流编辑器功能及在MacOS中的兼容性问题,指出直接使用会导致报错,推荐安装GNU sed解决,同时概述了sed的基本用法,包括追加、修改、删除等文本处理操作,适用于多种场景
一、概述
Linux下的sed命令是一种流编辑器,用于在命令行中对文本进行处理,常见的操作如:添加、修改、删除、追加等。
当所用系统为MacOS时,直接使用sed会出现
command a expects \ followed by text
此类报错,处理方法如下:
解决方案1:sed命令改写 --> 添加一个空串
sed -i ‘s/apple/applewatch/g' /tmp/a.txt
- 改写为
sed -i ‘' ‘s/apple/applewatch/g' /tmp/a.txt
解决方案2:调整mac下的sed命令 --> 安装gnu-sed
- 执行:
brew install gnu-sed alias sed=gsed
本人建议使用第二种方式解决,一劳永逸。
extra
:在使用sed新增一行时会使用到\
,macOS会把反斜杠解析为命令结束字符,后面不允许携带新字符,导致报错
extra characters after \ at the end of a command
只能通过把命令分割成两行内容。
示例:
原命令:sed -i '$a new line' /tmp/a.txt macOS下需要写成: sed -i '' -e '$a\ new line' /tmp/a.txt
二、用法
以下介绍sed命令常用方法。
1、文件末尾追加一行
sed -i '$a <new_line>' <file_name> 示例:sed -i '$a this is a new line' /tmp/sed.txt
2、指定行后新增一行
sed -i '/<specific_line>/a\<new_line>' <file_name> 示例:sed -i '/an existing line/a\this is a new next line' /tmp/sed.txt
其中<specific_line>可以为模糊匹配,例如为line但有多行都包含line,此时会在所有包含line关键字的行后都新增一行。
此规则以下都适用。
3、指定行前新增一行
sed -i '/<specific_line>/i\<new_line>' <file_name> 示例:sed -i '/an existing line/i\this is a new upper line' /tmp/sed.txt
4、修改指定行
sed -i 's/<old_content>/<new_content>/g' <file_name> 示例:sed -i 's/magic_switch=0/magic_switch=1/g' /tmp/sed.txt
5、删除指定行
sed -i '/<specific_line>/d' <file_name> 示例:sed -i '/trash_line/d' /tmp/sed.txt
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。