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)
定义"] "
为F
ield S
eparator,我们加入字段具有转换的各字段的第一个字符之后回到一起(从起始2
Nd和高达NF
所述N
的棕土F
ields)to
upper
的情况。
然而,少数(小心awk
实现包括mawk
和FreeBSD awk
(这样可能的MacOS”也一样)没有被国际化,所以将不能改变[GR] ?
成[GR] ?
(或[FR] éric
成[FR] Éric
如果é
在其-由前的形式(U + 00E9))中表达。