我正在编写一个shell(bash)脚本,我正试图想出一个简单的方法来完成一个简单的任务。
我在变量中有一些字符串。 我不知道这是否相关,但它可以包含空格,换行符,因为实际上这个字符串是整个文本文件的内容。
我想用其他东西替换某个子串的最后一次出现。 也许我可以使用正则表达式,但有两个时刻让我感到困惑:
答案 0 :(得分:4)
${var#pattern}
${var%pattern}
${var/pattern/repl}
进行一般更换模式是'文件名'样式扩展,最后一个可以以#
或%
为前缀,仅在开头或结尾(分别)匹配
全部在(长)bash手册页中。检查“参数扩展”一章。
答案 1 :(得分:1)
amn表达式
s/match string here$/new string/
应该做的诀窍 - s是替代,/分解命令,$是行标记的结束。您可以在vi中尝试这一点,看它是否能满足您的需求。
答案 2 :(得分:0)
我会查看awk或sed的手册页。
答案 3 :(得分:0)
Javier的回答是特定于shell的,并不适用于所有shell。
MrTelly和epochwolf提到的sed答案是不完整的,应该看起来像这样:
MyString="stuff ttto be edittted"
NewString=`echo $MyString | sed -e 's/\(.*\)ttt\(.*\)/\1xxx\2/'`
无需使用$来标记结尾的原因是第一个'。*'是贪婪的,并且会尝试尽可能多地收集,同时允许正则表达式的其余部分为真。 / p>
这个sed命令在任何使用的shell上下文中都可以正常工作。
答案 4 :(得分:0)
通常当我遇到Sed时,我会使用此页面,