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 或其他方式做到这一点?
请解释解决方案,我想了解和学习。
谢谢。
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))中表达。