将 ] 后的第一个字母更改为大写

Duc*_*uck 0 sed awk perl text-processing

我有一个 CSV 文件,其中有数千行,如下所示:

bla bla blab [FR] john is bla bla
bla [US] blue house in Chicago...
[ES] accessing the safe... bla bla
Run Code Online (Sandbox Code Playgroud)

看到之间的元素[ ]?这些元素后面总是跟一个空格和一个新短语的开头。我想将空格后找到的第一个字母转换为大写,使文件像

bla bla blab [FR] John is bla bla
bla [US] Blue house in Chicago...
[ES] Accessing the safe... bla bla
Run Code Online (Sandbox Code Playgroud)

我如何从终端、使用、sed、awk 或其他方式做到这一点?

请解释解决方案,我想了解和学习。

谢谢。

Sté*_*las 6

POSIXly,你可以这样做:

awk -F '] ' '{
  out = $1
  for (i = 2; i <= NF; i++)
    out = out FS toupper(substr($i, 1, 1)) substr($i, 2)
  print out}' < infile
Run Code Online (Sandbox Code Playgroud)

或者:

awk '
  BEGIN {FS = OFS = "] "}
  {
    for (i = 2; i <= NF; i++)
      $i = toupper(substr($i, 1, 1)) substr($i, 2)
    print
  }' < infile
Run Code Online (Sandbox Code Playgroud)

定义"] "Field Separator,我们加入字段具有转换的各字段的第一个字符之后回到一起(从起始2Nd和高达NF所述N的棕土Fields)to upper的情况。

然而,少数(小心awk实现包括mawk和FreeBSD awk(这样可能的MacOS”也一样)没有被国际化,所以将不能改变[GR] ?[GR] ?(或[FR] éric[FR] Éric如果é在其-由前的形式(U + 00E9))中表达。