我正在寻找一个正则表达式来删除一个字符的单词。我不介意是否使用 perlawksedbash 内置函数。

测试用例:

$ echo "a b c d e f g h ijkl m n opqrst u v" | $COMMAND

期望的输出:
ijkl opqrst

到目前为止我尝试过的:
$ echo "a b c d e f g h ijkl m n opqrst u v" | sed 's/ . //g'
acegijkln opqrstv

我猜是:
  • a 没有被删除,因为它之前没有空格
  • c 仍然存在,因为一旦 b 被删除,它之前就没有空格了
  • 等等...

  • 尝试#2:
    $ echo "a b c d e f g h ijkl m n opqrst u v" | sed 's/\w.\w//g'
         s v
    

    在这里我完全不明白发生了什么。

    欢迎任何帮助+解释,我想学习。

    最佳答案

    您必须使用词边界 \b (或) \<\> 分别匹配单词开头和结尾的空字符串。

    echo "a b c d e f g h ijkl m n opqrst u v" | sed 's/\b\w\b \?//g'
    

    (或者)
    echo "a b c d e f g h ijkl m n opqrst u v" | sed 's/\<.\> \?//g'
    

    10-05 22:39