Sed 正则表达式替换 Solaris 上



我有一个文件假人.txt包含以下内容:

"my_server"1"n9j7gd8kl4"
"widget"1"vnhck67hn"
"other_server"1"tbone"
"blah"1"n9j7gd8kl4"
"server_new"1"g54"
"genserver"1"vf45s"
"prd+other_server"1"f""jh34t"
"test_blah"1"tbone"

我需要在 Solaris 中使用类似泛型的单行代码将其更改为此内容(任何人都可以提供帮助吗?

"my_server"1"tbone"
"widget"1"vnhck67hn"
"other_server"1"tbone"
"blah"1"n9j7gd8kl4"
"server_new"1"tbone"
"genserver"1"tbone"
"prd+other_server"1"f""jh34t"
"test_blah"1"tbone"

即。对于前双引号内包含字符串"server"且该行格式为"string1"\1\"string2"的每一行,则将 string2 的值更改为"tbone"

sed 's/^("[^"]*server[^"]*"\1\)".*"$/1"tbone"/'

这允许"server"出现在第一个字符串中的任何位置,而不是像所有示例中那样出现在末尾。 如果您只想在末尾使用它,请省略第二个[^"]*

哦,要处理"没有双引号或反斜杠"的要求:

sed 's/^("[^\"]*server[^\"]*"\1\)"[^\"]*"$/1"tbone"/'

区别在于否定字符类中的反斜杠。

cat dummy.txt | perl -pe 's{ ^ (" [^"\]* server [^"\]* " \1 \") [^"\]+ " $}{${1}tbone"}xms;'

Perl版本的可读性稍微强一些。

相关内容

  • 没有找到相关文章

最新更新