0

我有一个包含以下内容的文件 dummy.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"

IE。对于在第一个双引号中包含字符串 'server' 且行格式为 "string1"\1\"string2" 的每一行,然后将 string2 的值更改为 'tbone'

4

2 回答 2

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

这允许 'server' 出现在第一个字符串中的任何位置,而不仅仅是在所有示例中的末尾。如果你只想要它在最后,省略第二个[^"]*

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

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

不同之处在于否定字符类中的反斜杠。

于 2012-12-16T07:20:54.573 回答
1
cat dummy.txt | perl -pe 's{ ^ (" [^"\\]* server [^"\\]* " \\1 \\") [^"\\]+ " $}{${1}tbone"}xms;'

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

于 2012-12-16T10:28:11.177 回答