我试图找出是否可以在单个sed命令中编辑一个文件,而无需手动将编辑的内容流到一个新文件中,然后将新文件重命名为原始文件名。
我尝试了-i选项,但是Solaris系统说-i是非法选项。还有别的办法吗?
我试图找出是否可以在单个sed命令中编辑一个文件,而无需手动将编辑的内容流到一个新文件中,然后将新文件重命名为原始文件名。
我尝试了-i选项,但是Solaris系统说-i是非法选项。还有别的办法吗?
当前回答
如果你想替换包含'/'的sting,你可以使用'?'。例如,将所有*.py文件的“/usr/local/bin/python”替换为“/usr/bin/python3”。
找到。/usr/bin/python ?/usr/bin/python3?G ' {} \;
其他回答
如果您正在替换相同数量的字符,并且在仔细阅读“就地”编辑文件后……
您还可以使用重定向操作符<>打开文件进行读写:
sed 's/foo/bar/g' file 1<> file
现场观看:
$ cat file
hello
i am here # see "here"
$ sed 's/here/away/' file 1<> file # Run the `sed` command
$ cat file
hello
i am away # this line is changed now
从Bash参考手册→3.6.10打开文件描述符读写:
重定向操作符 [n] < >词 使文件名为word展开的文件被打开 在文件描述符n或文件描述符0上进行读写 如果未指定n。如果该文件不存在,则创建该文件。
-i选项将编辑的内容传输到一个新文件中,然后在幕后重命名它。
例子:
sed -i 's/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g' filename
而在macOS上,你需要:
sed -i '' 's/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g' filename
Sed支持就地编辑。来自男人sed:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
例子:
假设你有一个文件hello。图文短信:
hello world!
如果你想保留旧文件的备份,使用:
sed -i.bak 's/hello/bonjour' hello.txt
你会得到两个文件:hello.txt,内容如下:
bonjour world!
还有hello。txt。bak的旧内容。
如果不想保留副本,只需不要传递扩展参数。
mv file.txt file.tmp && sed 's/foo/bar/g' < file.tmp > file.txt
应该保留所有硬链接,因为输出被直接返回以覆盖原始文件的内容,并且避免了对sed的任何特殊版本的需要。
就像《007:大破天幕杀机》中Moneypenny说的:“有时候旧的方法是最好的。” 金凯德后来也说过类似的话。
$ printf ',s/false/true/g\nw\n' | ed {YourFileHere}
快乐编辑到位。 增加了'\nw\n'来写入文件。很抱歉没有及时回复请求。