Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何大写bash中每行的第一个字母?_Linux_Bash_Sed_Uppercase_Capitalization - Fatal编程技术网

Linux 如何大写bash中每行的第一个字母?

Linux 如何大写bash中每行的第一个字母?,linux,bash,sed,uppercase,capitalization,Linux,Bash,Sed,Uppercase,Capitalization,我正在寻找一个命令,它将bash中每行的第一个字母大写 实际上我使用了这个命令: sed 's/^\(.\)/\U\1/' 但是我需要使用另一个命令而不是“\U”。 .为什么您需要使用\U以外的东西 您可以使用仅大写一个字母的\u: sed 's/./\u&/' 或者,使用参数展开: while read line ; do echo "${line^}" ; done 这是一种简单的工作方式: sed-e的/^./\U&/'您的文件将您的文件拆分为第一个字符/行的其余部分,将第一

我正在寻找一个命令,它将bash中每行的第一个字母大写

实际上我使用了这个命令:

sed 's/^\(.\)/\U\1/'
但是我需要使用另一个命令而不是“\U”。
.

为什么您需要使用
\U
以外的东西

您可以使用仅大写一个字母的
\u

sed 's/./\u&/'
或者,使用参数展开:

while read line ; do echo "${line^}" ; done

这是一种简单的工作方式:
sed-e的/^./\U&/'您的文件

将您的文件拆分为第一个字符/行的其余部分,将第一个字符上移并将te列粘贴在一起

paste -d "" <(cut -c1 inputfile| tr '[:lower:]' '[:upper:]') <(cut -c2- inputfile)
您可以在命令行上尝试同样的方法。如果没有睡眠,第二次剪切将找到一个空文件。当原始命令运行超过1秒时,1秒睡眠将失败

mycommand | tee /tmp/dont_do_this | 
   cut -c1 | tr '[:lower:]' '[:upper:]' | 
   paste -d "" - <(sleep 1;cut -c2- /tmp/dont_do_this)

为什么你不能使用
\U
?wrt
我需要使用另一个命令而不是“\U”
-这样我们就不用浪费时间建议他们了,还有什么完全合理的解决方案你不能使用?您是否有任何其他不明显的要求(例如,它不能是perl或它必须是sed或它不能是GNU-sed或它不能是shell或它只能是shell内置的或它只能是sed或awk或….)?你的台词总是以字母开头,还是以数字或标点符号开头?如果是这样,你希望发生什么?您的问题包括简洁、可测试的示例输入和预期输出,以及完整的requirements@Pedro只有答案符合要求。它是用于作业的-我们被要求在没有任何“\u”或“\u”的情况下使用它。讲师要求我们使用类似“[:upper:]”的词。我只是找不到任何其他方式来表示它。
[:upper::
是一个POSIX字符类,在regexps中用于以独立于语言环境的方式匹配大写字母。它与将字母转换为大写无关。这似乎是GNU的扩展。例如,BSD sed.OP说:
但我需要使用另一个命令而不是“\U”这是我一直在寻找的-只是使用粘贴命令。我只需要从标准输出,而不是从一个文件。我应该如何编写它?使用标准输入需要一种不同的方法。拆分输入并连接两个线程需要一种面向行的方法。或
awk
mycommand | tee /tmp/dont_do_this | 
   cut -c1 | tr '[:lower:]' '[:upper:]' | 
   paste -d "" - <(sleep 1;cut -c2- /tmp/dont_do_this)
mycommand | while read -r line; do
   printf "%s%s\n" $(tr '[:lower:]' '[:upper:]' <<< "${line:0:1}") "${line:1}"
done