我试图使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。