sed -i 选项有啥作用?
Posted
技术标签:
【中文标题】sed -i 选项有啥作用?【英文标题】:What does sed -i option do?sed -i 选项有什么作用? 【发布时间】:2013-09-02 20:32:49 【问题描述】:我正在调试一个 shell 脚本并试图找出以下命令执行的任务:
sed -i '1,+999d' /home/org_user/data.txt
我需要更改此命令,因为它失败并出现以下错误:
illegal option sed -i
但在改变之前,我需要了解 BAU 的功能。
感谢您在这方面的任何意见。
【问题讨论】:
这个命令很可能使用 GNU 的 sed 命令实现。可以使用大多数 sed 复制它:sed '1,1000d' file >temp_file && mv temp_file file
您好,感谢您的意见,我同意您指出的命令。但是,您能建议一下 '1,+999d' 到底是做什么的吗?我阅读了以下答案,他们建议它“应该”删除从 1 到 999 的行。但是,我想确定一下。
sed 中的 '1,+999d' 表示从第 1 行到第 1+999 行删除。剩余文件将少于前 1000 行。
非常感谢。由于 -i 选项失败,将以单独的方式处理该场景。感谢及时回复.. :)
【参考方案1】:
如果给定-i
选项,sed
就地编辑文件。
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)
来自 sed(1)
http://www.gnu.org/software/sed/manual/sed.html#Introduction
【讨论】:
Philip Kirkbride 的回答提供了一个有用的示例,更好地解释了“就地编辑文件”的实际含义意味着。【参考方案2】:sed
的某些实现不支持-i
选项。它的作用可以被模拟
sed -e '...' file > tmp
mv tmp file
【讨论】:
感谢您的意见。所以在这里, '1,+999d' 给出了一个错误,说 "garbled text" 。此命令是否从文件中删除所有行?? @Allzhere:它应该删除第 1 到 999 行。我不确定所有 seds 都支持+
。
@choroba 删除第 1 到 1+999=1000 行。它也是一个 GNU 扩展。
@Allzhere 删除所有行:1,$d
.【参考方案3】:
它的适用用途如下。假设您有以下文件file.txt
:
1, 2, 6, 7, "p"
我们想用 0 替换“p”。
sed 's/"p"/0/g' file.txt
使用上面的方法只是将输出打印到命令行中。
你会想为什么不直接将文本重定向回文件,如下所示:
sed 's/"p"/0/g' file.txt > file.txt
不幸的是,因为the nature of redirects,上面只会产生一个空白文件。
相反,必须为输出创建一个临时文件,该文件稍后会覆盖原始文件,如下所示:
sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt
与使用 -i 的 sed 就地编辑选项相比,使用更简单的命令代替了上述冗长的解决方法:
sed -i 's/"p"/0/g' file.txt
【讨论】:
sed -i 's/"p"/0/g' file.txt
返回 error_code 1
说 sed: 1: "file.txt": invalid command code k
:(以上是关于sed -i 选项有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
JQuery 自动完成中的 formatResult 和 formatItem 选项有啥作用?
Node.js express-session 代理选项有啥作用?