如果它们也在下一个单词(sed)中,如何从单词中删除字符?

Aar*_*ron 3 linux sed

我正试图找到一种方法来删除第一个单词IF中的所有字符,该字符位于第二个单词中.输入看起来像这样:

电脑成本

结果应该是:"mpuer"因为c,o和t被删除了.这样的多行由返回分隔,2个单词用空格分隔.

我一直在寻找解决方案,但我真的被卡住了.所有帮助表示赞赏.

pot*_*ong 6

这可能对你有用:

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

说明:

  • 为将来的分支命令制作标签 :a;
  • 删除第一个单词中与第二个单词中的相同字符匹配的字符 s/\(.\)\(.* .*\1.*\)/\2/
  • 如果替换发生分支到标签 ta
  • 当没有更多替换删除第二个单词时. s/ .*//

替换正则表达式可以进一步解释:

  • \(.\)匹配第一个单词中的任何字符(后面称为\1)
  • \(.* .*\1.*\)匹配单词的其余部分中的任何字符,.*后跟一个空格, followed by some on none characters in word two .*然后是单词1中的匹配字符,\1后跟单词2中的其余字符,.*此分组稍后将被称为\2.
  • 如果上述匹配替换它,\2从而有效地删除匹配字符\1