使用Sed获取打开和closures字符之间的所有字符

我试图使用sed来获取开始和结束字符之间的一些字符。 这些开始和结束字符可以是括号,例如{和}等。在我的具体情况下,开始字符是= ,结束字符是行的结尾。

PHP中,我有一个通常为我工作的正则expression式: ([^^]*?) 。 但是,因为sed使用POSIX-BRE的味道,我不相信这会起作用。

我正在使用正则expression式的string可能是这样的: password=mailPASSWORD 。 mailPASSWORD可以包含常规字母字符以及特殊字符。

所以我想replacemailPASSWORD并把我自己的密码。

sed -i -r "s/password[ ]*=[ ]*([pattern_goes_here])/password=mypassword/" /myfile

我会很感激一些帮助。

提前致谢

编辑

在看了sed的其他select之后,我发现perl实际上是这类事情的一个更好的工具。 因为我的正则expression式知识基于perl,所以看起来更好。

以下是我将如何解决同样的问题:

perl -p -i -e "s/password *= *[^n]*/password=mypassword/" /myfile

由于我一行一行地做东西,所以让脚本变得更容易。

对于您的具体情况:

sed -i -r -e 's/password *= *[^t ]*/password=mypassword/' /myfile

对于更一般的情况,如果结束分隔符是一个字符,比方说,你模拟这个:

.*?x

有了这个:

[^x]*x

对于多字符结尾分隔符来说,它变得更加复杂,但这是基本的想法:不是非贪婪匹配,而是创建一个匹配除了结尾分隔符之外的所有内容的模式。

用sed :

[jaypal:~] sed 's/(.*[^=]=)[[:alnum:]]+/1mypassword/' <<< password=mailPASSWORD password=mypassword

用awk

[jaypal:~] awk -F"=" '{$2="mypassword";print $1"="$2}' <<< password=mailPASSWORD password=mypassword

这可能适合你:

echo 'someotherpassword=xxx password = mailPASSWORD_with_an_=_sign another=yyy' | sed 's/^(.*<passwords*=s*)S*/1mypassword/' someotherpassword=xxx password = mypassword another=yyy

如果你不想保留=符号的任何一边的空格,那么:

echo 'someotherpassword=xxx password = mailPASSWORD_with_an_=_sign another=yyy' | sed 's/^(.*<password)s*=s*S*/1=mypassword/' someotherpassword=xxx password=mypassword another=yyy

如果该行只包含一个密码分配,则:

echo 'password = mailPASSWORD_with_an_=_sign' | sed 's/(=s*)S*/1mypassword/' password = mypassword

或者没有空格:

echo 'password = mailPASSWORD_with_an_=_sign' | sed 's/s*=.*/=mypassword/' password=mypassword

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...