在上一行的句号之后将一行的第一个字母大写

在上一行的句号之后将一行的第一个字母大写

我有很多小诗要编辑,如下所示:

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.

相关内容