linux - 在 unix/linux 中删除文件中最后一次出现的字符串

标签 linux bash shell unix sed

需要将文件中最后一个 VirtualHost 字符串移动到 eof。我尝试使用 sed

#!/bin/bash
tac infile.txt | sed "s/<\/VirtualHost>//; ta ; b ; :a ; N ; ba" | tac
echo "</VirtualHost>" >>infile.txt

当前文本:

</VirtualHost>
#Added for Patch 
<LocationMatch ^/bea_wls_internal/>
RewriteEngine ON
</VirtualHost>
RewriteOptions inherit
</LocationMatch>

所需文本:

</VirtualHost>
#Added for Patch 
<LocationMatch ^/bea_wls_internal/>
RewriteEngine ON
RewriteOptions inherit
</LocationMatch>
</VirtualHost> 

最佳答案

ed 编辑器在这种情况下会派上用场。它在调用时将自己定位在文件的最后一行,因此您需要做的就是向后搜索您想要的行并将其删除。您也可以同样轻松地添加回行(首先这样做是有意义的):

echo 'a
</VirutalHost>
.
?</VirtualHost>?
d
wq' | ed -s infile.txt

-s 选项会抑制 ed 的诊断输出。

a 追加到仅包含 的行。

?向后搜索

d 删除一行

wq写入文件并退出

关于linux - 在 unix/linux 中删除文件中最后一次出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006421/

相关文章:

bash - tcpdump 抑制脚本中的控制台输出并写入文件

linux - 如何在 bash 中将命令和选项存储在单独的变量中

python - 终端问题-cd导航返回“不是目录”

java - 从 Java 执行 CURL - 正确的方法是什么?

bash - 当 bash 函数具有相同名称时调用程序

linux - 无法在 CentOS 6.6 上使用 gcc 4.8.2 构建 libtool 2.4.3

linux - 将 Linux 配置文件保存在 SVN 中(Subversion)

linux - Dropbear - 当用户的 shell 被重定向时无法 SSH

shell - docker run bash脚本无法退出

linux - 将 Visual Studio makefile 转换为 Linux makefile