我有一个文件假人.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版本的可读性稍微强一些。