【问题标题】:What is the difference between \u and \U in GNU sedGNU sed 中的 \u 和 \U 有什么区别
【发布时间】:2022-01-08 21:47:16
【问题描述】:

我在 sed 中遇到了这两个命令 \u 和 \U(以及其他命令,例如 \l 和 \L)。我不得不承认我是一个新手并且对 GNU sed 几乎没有经验。 我尝试了以下两个命令,但得到了相同的结果:

# I have tested this on Ubuntu 20.04
echo "abc" | sed 's/./\u&/g' # output is: ABC
echo "abc" | sed 's/./\U&/g' # output is: ABC

这两个命令的输出相同。那么,它们有什么区别呢?

【问题讨论】:

  • 在替换的 LHS 上将 . 更改为 .* 并查看差异。同时丢失g 标志。

标签: bash sed command-line command


【解决方案1】:

在替换替换中,\u 将下一个字符转换为大写,而 \U 将替换的其余部分转换为大写,或者直到出现 \L 或 \E。

您的示例不会显示它们之间的区别,因为您一次只替换一个字符。如果您在echo abc | sed 's/.*/\u&/' 中使用模式.*(而不是.),您将得到Abc。

这些命令记录在info sed,这里是:https://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command

【讨论】:

  • @OK-Validation 我没有否决您的问题。它可能被否决了,因为它不是一个编程问题,而是一个“这个程序如何工作?”属于超级用户的问题。虽然我个人认为在 shell 编程方面这条线不太清楚。
  • 您是否接受答案完全取决于您。除了说 . 匹配单个字符之外,我不知道如何更清楚,但 .* 将匹配每个字符。如果您尝试's/.*/\u&/',您将获得Abc。另请注意,g 表示 repeat 替换该行中每次出现的模式。也许echo abc | sed 's/./\u&_/g' 可以说明问题。它打印A_B_C_。
  • 在我看来,@OK-Validation dan 的回答非常清楚。我无法想象有什么可以改进它的。
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 2012-05-08
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多