我正在尝试找到一种方法来删除第一个单词中的所有字符,前提是该字符位于第二个单词中。输入看起来像这样:

电脑费用

结果应为:“mpuer”,因为删除了c,o和t。像这样的多行之间用回车符分隔,两个单词之间用空格分隔。

我已经花了很多时间寻找解决方案,但是我真的很坚持。感谢所有帮助。

最佳答案

这可能对您有用:

echo "computer cost" |
sed ':a;s/\(.\)\(.* .*\1.*\)/\2/;ta;s/ .*//'
mpuer

说明:
  • 为将来的分支命令创建标签:a;
  • 删除第一个单词中与第二个单词中相同字符匹配的字符s/\(.\)\(.* .*\1.*\)/\2/
  • 如果发生替换,则分支以标记ta
  • 如果没有更多替换,请删除第二个单词。 s/ .*//

  • 替换正则表达式可以进一步解释:
  • \(.\)匹配单词word(后来称为\1)中的任何字符
  • \(.* .*\1.*\)匹配单词.*其余词中的所有字符,后跟空格,然后单词2 .*中的某些字符上没有字符,再匹配单词一\1中的匹配字符,然后匹配单词二.*中的其余字符,稍后将进行分组被称为\2
  • 如果以上匹配项都替换为\2,从而有效删除匹配的字符\1
  • 10-07 19:46
    查看更多