Regex 塞德·雷格克斯最后一场比赛

Regex 塞德·雷格克斯最后一场比赛,regex,linux,sed,Regex,Linux,Sed,我想在文件中更改每行中最后一个与XXXX的匹配项 给定文件格式: "192.xx2" "someting" "another2321SD" 我想要: "192.xx2" "someting" "XXXX" 仅使用sed 我的解决方案: sed -r 's/"(?:.(?!".+"))+$/XXXX/' file 请记住 (?:…)是,不

我想在文件中更改每行中最后一个与XXXX的匹配项 给定文件格式:

"192.xx2" "someting" "another2321SD" 
我想要:

"192.xx2" "someting" "XXXX" 
仅使用sed 我的解决方案:

sed -r 's/"(?:.(?!".+"))+$/XXXX/' file

请记住

  • (?:…)
    是,不支持此构造
  • (?!…)
    是负数,POSIX正则表达式也不支持此构造
要屏蔽最后一对双引号之间的所有内容,可以使用

sed-r的/(.*)*/\1“XXXX”/“文件”
sed的/\(.*\)“*”/\1“XXXX”/”文件
见:

s=''192.xx2”“某物”“另一个2321SD''

sed-r的/(.*)“.*/\1”XXXX/'记住捕获中最后一对双引号之前的内容

sed -r 's/^(.*)"[^"]*"$/\1"XXXX"/'

至少你要求改进。我不知道我的答案是否更好,但你也可以假设
是输入的最后一个字符:
sed的/“[^”]*“$/”XXXX/”@WalterA谢谢,Walter。假设最后引用的部分非常接近字符串的末尾,我认为当前的方法应该已经足够好了。由于问题标签,我没有考虑<代码> AWK ,我想可以有更多的假设。