嘿伙计我不知道这是否可以用shell完成?有一个200行的脚本,我只想改变:
...
161. subject = subject.force_encoding('binary')
162. body = msg.force_encoding('binary')
163.
164. smtp.send_mail(<<EOS, @from, @to.split(/,/))
165. Date: #{Time::now.strftime("%a, %d %b %Y %X")}
...
有关:
161. subject = subject.force_encoding('binary')
162. body = msg.force_encoding('binary')
163. converted_time = Time.now.utc
164. smtp.send_mail(<<EOS, @from, @to.split(/,/))
165. Date: #{converted_time.strftime("%a, %d %b %Y %X")}
....
可以使用shell吗?我知道如何在最后添加内容或使用&gt;更新新内容的文件和&gt;&gt;但我不知道是否有可能以这种方式修改文件。如果没有,我只会使用我认为的perl脚本。
(代码开头的数字不是代码,仅供参考,是行号)
答案 0 :(得分:2)
您可以使用此语法将第165行的全部内容替换为<new content>
:
sed "165s/.*/<new content>/g" file
在您的情况下,如果我看到它正确,您想要将内容添加到第163行并替换第165行中的内容。所以这将成为诀窍:
$ line163='converted_time = Time.now.utc'
$ line165='Date: #{converted_time.strftime("%a, %d %b %Y %X")}'
$
$ sed -e "3s/.*/$line163/g" -e "5s/.*/$line165/g" file
subject = subject.force_encoding('binary')
body = msg.force_encoding('binary')
converted_time = Time.now.utc
smtp.send_mail(<<EOS, @from, @to.split(/,/))
Date: #{converted_time.strftime("%a, %d %b %Y %X")}
注意我在我的案例中使用了第3行和第5行。我存储要在变量中使用的文本,然后使用sed "s/content/$variable/g"
表达式。 -e
用于同时执行多个不同的sed
操作。
要使更改成为永久更改,请添加-i
标记:
sed -i -e ... file
将使用新内容更新file
。在此之前创建备份是很好的,可以通过以下方式轻松完成:
sed -i.bak -e ... file
它将使用新内容更新file
,并且将使用名称file.bak
(或您为i
提供的任何扩展名)创建备份文件。