用法

用法

我有一个单词列表,我想将一个字符设置为小写,一个字符设置为大写。例如,“信息”一词我希望是“信息”和“信息”

答案1

GNUsed方法:

-- 以小写字母开头:

s="information"
sed 's/\(.\)\(.\)/\L\1\U\2/g' <<< $s
iNfOrMaTiOn

-- 以大写字母开头:

s="information"
sed -E 's/(.)(.){,1}/\U\1\L\2/g' <<< $s
InFoRmAtIoN

  • \L- 将替换内容转为小写,直到找到\U\E

  • \U- 将替换内容转为大写,直到找到\Lor为止\E


呆呆地(GNU awk)方法:

awk -v FPAT="[a-z]" '{ s=""; for(i=1;i<=NF;i++) { s=s""((i%2)? toupper($i) : $i)} print s }' <<< $s
InFoRmAtIoN
  • FPAT="[a-z]"- 表示字段值的模式

其他awk使用函数的变化split()

awk  '{ n=split($0,a,""); s=""; 
      for(i=1;i<=n;i++) { s=s""((i%2)? toupper(a[i]): tolower(a[i])) } print s }' <<< $s
InFoRmAtIoN
  • split()返回创建的元素数量

答案2

POSIXly

awk '
  {
    for(i = 1; i <= length; i++) {
      c = substr($0, i, 1)
      printf "%s", (i%2 ? toupper(c) : tolower(c))
    }
    print ""
  }' < words.txt

答案3

perl -pe '
   ($_ = lc) =~ s/([a-z])([^a-z]*)(.)/\L$1$2\U$3/g;
   $_ .= y/a-zA-Z/A-Za-z/r;
'
  1. 将输入行转换为全部小写。
  2. 交替更改大小写,将非字母表两侧的字符先下后上。它也可能什么都没有,这意味着阿尔法是连续的。
  3. 最后,使用y又名tr命令反转大小写以获取两个版本。

用法

s=“信息”;回声“$s”| perl -pe '....'

结果:

iNfOrMaTiOn
InFoRmAtIoN

相关内容