你很近很好的尝试了,你不需要在这里计算线的长度,子(substr)
足够智能,可以获得您提到的字符位置的剩余长度,并且不要给出它应该打印的位置(长度值)。你能试试下面的吗。
(通常这类问题可以通过bash本身解决,但当OP尝试@bob dylan提供的bash解决方案时,由于bash的旧版本存在问题,因此我取消删除这一个为OP工作的解决方案)
echo“$foo”|awk'{print tolower(substr($0,1,1))substrs($0,2)}'输入文件
说明:
- 使用
子(substr)
的功能awk公司
获取当前行中的子字符串。
- 然后抓住第一个字母
子项(0,1,1美元)
把它包在里面小写
把它做成小盒子。
- 现在通过执行`substr($0,2)打印行的其余部分(因为第一个字符已经被前一个子字符捕获),这将从第二个字符打印到行的最后一个。
编辑@bob dylan:
https://www.shell-tips.com/mac/upgrade-bash/
MacOS附带了旧版本的bash。但是,如果您使用的是4+,则应该能够使用本机bash函数将第一个字符从上到下转换:
$bash--版本GNU bash,版本4.4.19(1)-版本(x86_64-redhat-linux-GNU)版权所有(C)2016 Free Software Foundation,Inc。许可证GPLv3+:GNU GPL版本3或更高版本<http://gnu.org/licenses/gpl.html>这是自由软件;你可以自由地改变和重新分配它。在法律允许的范围内,无任何担保。$猫粮.sh#!/垃圾桶/垃圾桶foo=“MyCamelCaseValue”echo“${foo,}”$bash foo.sh(美元)我的骆驼案例价值
整个字符串的进一步示例,从下到上等等。
$echo$foo我的骆驼案例价值echo“${foo,}”我的骆驼案例价值$echo“${foo,,}”mycamecase值$echo“${foo^}”我的CamelCaseValue$echo“${foo^^}”MYCAMELCASE价值