tps*_*wal 12 solaris sed text-processing
我在我的项目中有一个要求,将文件中的一些现有文本替换为foo
其他一些文本,例如fooofoo
:
abc.txt
name
foo
foo1
Run Code Online (Sandbox Code Playgroud)
所以我试过:
abc.txt
name
foo
foo1
Run Code Online (Sandbox Code Playgroud)
但是我收到这个错误:
sed:非法选项——
i
我在手册中发现我必须使用:
sed -i "s/foo/fooofoo/g" abc.txt
Run Code Online (Sandbox Code Playgroud)
但是,这也不起作用。
我在perl
和 中找到了替代方案,awk
但sed
非常感谢Solaris 中的解决方案。
我正在使用这个版本的 bash:
GNU bash,版本 3.2.57(1)-release (sparc-sun-solaris2.10)
don*_*sti 15
使用ed
. 它在大多数平台上都可用,并且可以就地编辑您的文件。
因为sed
基于ed
语法替换模式是类似的:
ed -s infile <<\IN
,s/old/new/g
w
q
IN
Run Code Online (Sandbox Code Playgroud)
如果您无法安装 GNU sed,请使用:
sed "s/foo/fooofoo/g" abc.txt >abc.tmp && mv abc.tmp abc.txt
Run Code Online (Sandbox Code Playgroud)
这使用重定向将 sed 的输出发送到临时文件。如果 sed 成功完成,那么这将abc.txt
用临时文件覆盖。
从 GNU sed 的源代码可以看出,这正是sed -i
它的作用。因此,这与sed -i
.
如果可能abc.tmp
已经存在,那么您可能希望使用mktemp
或类似的实用程序来为临时文件生成唯一名称。