我有很多小诗要编辑,如下所示:
Io avevo due sorelle,
una bionda e l’altra mora,
tutte e due leggiadre e belle
e gentil come l’aurora.
ma la bionda mi è sparita,
se ne è andata all’altra vita.
mi hanno detto che lassù
più risplende il suo bel viso
dove è gioia ed è sorriso
ma non tornerà mai più.
e la mora sta lontana,
nella terra pascoliana.
colgo e bacio il primo fiore:
il pensier quel bacio porta
su la viva e su la morta,
tutte e due lo stesso amore.
意大利语语法规则规定,当一节经文在前一节经文中有一个句号之后开始时,第一个字母要大写。应该是这样(例如,请参见第 5 行句点后的大写字母)
Io avevo due sorelle,
una bionda e l’altra mora,
tutte e due leggiadre e belle
e gentil come l’aurora.
Ma la bionda mi è sparita,
se ne è andata all’altra vita.
Mi hanno detto che lassù
più risplende il suo bel viso
dove è gioia ed è sorriso
ma non tornerà mai più.
E la mora sta lontana,
nella terra pascoliana.
Colgo e bacio il primo fiore:
il pensier quel bacio porta
su la viva e su la morta,
tutte e due lo stesso amore.
我在使用 sed 执行此操作时遇到麻烦,如何解决?你知道比 sed 更正确的方法,我也很感兴趣
答案1
GNU sed 具有大写功能 \U
sed -e '
$!N
s/\.\n./\U&/
P;D
' file
答案2
使用 Perl:
perl -00 -pe 's/\.\n./\U$&/g' file
这一次读取文件的一个段落(段落由至少一个空行分隔),并将点和换行符之后出现的任何字符大写。
答案3
printf '%s\n' 'g/\.$/+1s/./\u&/' '%p' | ex file
g/\.$/
选择所有带有句点的行。+1s
将下一行上的以下替换命令应用于每个选定项。\u
在替换槽中将下一个字符大写并且&
是“正则表达式匹配的任何内容”的元字符。%p
打印所有结果行。
笔记
该命令在标准输出中输出预期结果。要实际编辑文件,请使用“写入并退出”命令:
printf '%s\n' 'g/\.$/+1s/./\u&/' x | ex file
正则表达式
/\.$/
不会捕获最后一个句点后带有空格的行。要解决这种情况,请改用/\. *$/
。
答案4
使用sed
$ sed '/\.$/{n;s/^[a-z]/\U&/}' input_file
Io avevo due sorelle,
una bionda e l’altra mora,
tutte e due leggiadre e belle
e gentil come l’aurora.
Ma la bionda mi è sparita,
se ne è andata all’altra vita.
Mi hanno detto che lassù
più risplende il suo bel viso
dove è gioia ed è sorriso
ma non tornerà mai più.
E la mora sta lontana,
nella terra pascoliana.
Colgo e bacio il primo fiore:
il pensier quel bacio porta
su la viva e su la morta,
tutte e due lo stesso amore.