我正在尝试使用以下命令替换文件中的多个单词
sed -i #expression1 #expression2
文件
Something 123 item1
Something 456 item2
Something 768 item3
Something 353 item4
输出(所需)
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
试用
sed -i
我可以通过使用两次得到以下输出。
sed -i 's/Some/any/g' file
sed -i 's/item/stuff/g' file
我可以有任何可能的方法将其作为单个就地命令,例如
sed -i 's/Some/any/g' -i 's/item/stuff/g' file
当我尝试上面的代码时,它将s/item/stuff/g
作为一个文件并尝试对其进行处理。
答案1
根据您系统上的版本,sed
您可能可以执行以下操作
sed -i 's/Some/any/; s/item/stuff/' file
g
此处命令中的最后一个斜杠后面不需要s
,因为您只对每行进行一次替换。
或者:
sed -i -e 's/Some/any/' -e 's/item/stuff/' file
或者:
sed -i '
s/Some/any/
s/item/stuff/' file
该-i
选项(GNU 扩展现在被一些其他实现支持,尽管有些需要-i ''
替代)告诉sed
就地编辑文件;如果紧随其后有字符,-i
则sed
对原始文件进行备份,并使用这些字符作为备份文件的扩展名。例如,
sed -i.bak 's/Some/any/; s/item/stuff/' file
或者
sed -i'.bak' 's/Some/any/; s/item/stuff/' file
将修改file
,将原始保存到file.bak
.
当然,在Unix(或类Unix)系统上,我们通常使用'~'而不是'.bak',所以
sed -i~ 's/Some/any/;s/item/stuff/' file
答案2
您可以将 sed 表达式与“;”链接在一起
%sed -i 's/Some/any/g;s/item/stuff/g' file1
%cat file1
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
答案3
使用多个选项的多个表达式-e
:
sed -i.bk -e 's/Some/any/g' -e 's/item/stuff/g' file
或者你可以只使用一个:
sed -i.bk -e 's/Some/any/g;s/item/stuff/g' file
您应该为备份文件提供扩展名,因为当某些实现时sed
,例如OSX sed不适用于空扩展名(您必须使用它sed -i ''
来覆盖原始文件)。
答案4
您可以在 Ex 模式下使用 Vim:
ex -sc '%s/Some/any/|%s/item/stuff/|x' file
%
选择所有行s
代替x
保存并关闭