linux sed的详细讲解与使用方法

1简介
sed是一个流编辑器。流编辑器用于对输入流(文件或来自管道的输入)执行基本文本转换。虽然在某些方面类似于允许脚本编辑(例如ed)的编辑器,但 sed通过仅对输入进行一次传递来工作,因此更有效。但是它sed能够在管道中过滤文本,这特别区别于其他类型的编辑器。
2概述
例如,要替换所有出现的’你好’ 至 '世界’在文件中 input.txt中:

sed’s / hello / world /'input.txt> output.txt
如果您没有指定INPUTFILE,或者INPUTFILE是- , sed过滤标准输入的内容。以下命令是等效的:

sed’s / hello / world /‘input.txt> output.txt
sed’s / hello / world /’<input.txt> output.txt
cat input.txt | sed’s / hello / world /’ - > output.txt
sed将输出写入标准输出。使用-一世编辑文件而不是打印到标准输出。另请参阅用于将输出写入其他文件的命令W和s///w命令。以下命令将修改file.txt的 并且不产生任何输出:

sed -i’s / hello / world /'file.txt
默认情况下,sed打印所有已处理的输入(已通过命令修改/删除的输入除外d)。使用-n抑制输出,以及p打印特定行的命令。以下命令仅打印输入文件的第45行:

sed -n’45p’file.txt
sed将多个输入文件视为一个长流。以下示例打印第一个文件的第一行(此时就把one.txt存盘)和最后一个文件的最后一行(three.txt)。使用-s 扭转这种行为。

sed -n’1p; $ p’one.txt two.txt three.txt
没有 -e 要么 -Foptions,sed使用第一个非选项参数作为脚本,使用以下非选项参数作为输入文件。如果-e 要么 -Foptions用于指定脚本,所有非选项参数都作为输入文件。选项-e 和 -F可以组合,并且可以多次出现(在这种情况下,最终有效脚本将是所有单个脚本的连接)。

以下示例是等效的:

sed’s / hello / world /'input.txt> output.txt

sed -e’s / hello / world /'input.txt> output.txt
sed --expression ='s / hello / world /'input.txt> output.txt

echo’s / hello / world /’> myscript.sed
sed -f myscript.sed input.txt> output.txt
sed --file = myscript.sed input.txt> output.txt
3命令行选项
调用的完整格式sed是:

sed OPTIONS … [SCRIPT] [INPUTFILE …]
sed 可以使用以下命令行选项调用:

–version
打印出sed正在运行的版本和版权声明,然后退出。

–help
打印一条用法消息,简要总结这些命令行选项和错误报告地址,然后退出。

-n
–quiet
–silent
默认情况下,sed打印出在通过脚本每个周期结束时的模式空间(参见如何sed作品)。这些选项禁用此自动打印,sed仅在通过p命令明确告知时生成输出。

–debug
以规范形式打印输入sed程序,并注释程序执行。

$ echo 1 | sed’\%1%s21232’
3

$ echo 1 | sed --debug’\%1%s21232’
SED计划:
/ 1 / s / 1/3 /
INPUT:'STDIN’第1行
模式:1
命令:/ 1 / s / 1/3 /
模式:3
END-OF-周期:
3
-e script
–expression=script
将脚本中的命令添加到处理输入时要运行的命令集中。

-f script-file
–file=script-file
将文件脚本文件中包含的命令添加 到处理输入时要运行的命令集中。

-i[SUFFIX]
–in-place[=SUFFIX]
此选项指定要就地编辑文件。GNU sed通过创建临时文件并将输出发送到此文件而不是标准输出来完成此操作。1。

这个选项意味着 -s。

到达文件末尾时,临时文件将重命名为输出文件的原始名称。扩展(如果提供)用于在重命名临时文件之前修改旧文件的名称,从而制作备份副本2)。

遵循此规则:如果扩展名不包含a ,则将其作为后缀附加到当前文件名的末尾; 如果扩展名包含一个或多个 字符,则每个星号将替换为当前文件名。这允许您为备份文件添加前缀,而不是(或除了)后缀,或者甚至将原始文件的备份副本放入另一个目录(前提是该目录已存在)。

如果未提供扩展名,则会覆盖原始文件而不进行备份。

因为 -一世 采用可选参数,不应该跟其他短选项:

sed -Ei ‘…’ FILE
与…一样 -E -i 没有备份后缀 - 文件 将在不创建备份的情况下进行就地编辑。

sed -iE ‘…’ FILE
这相当于 --in就地= E,创造 FILEE 作为备份 文件
4参数的使用
sed -i 就是直接对文本文件进行操作的
sed -i ‘s/原字符串/新字符串/’ /home/1.txt
sed -i ‘s/原字符串/新字符串/g’ /home/1.txt

这两条命令的区别看示例吧

这是1.txt的内容
#cat 1.txt d ddd #ff

再看执行这两条命令的区别

sed -i ‘s/d/1234/’ /home/1.txt
执行结果
1234
1234dd
#fff

sed -i ‘s/d/7523/g’ 1.txt
执行结果
1234
123412341234

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值