我有一个文件,每一行都有一个句子,例如

Random stuff,
"First sentence",
"second sentence.",
"Third sentence!"
More Random Stuff,


等等...

我只想在上面的示例中修改带引号的行,即第二,第三和第四行。

我要进行以下修改-


在行尾添加句号(如果不存在句号或感叹号)
使第一个字符大写(如果尚未大写)


我尝试了以下解决方案以添加句号-

sed -i 's/[^!.]",/.",/g' $file


上面的命令将句子的最后一个字符删除为-

"First sentenc.",


如果我尝试以下命令-

sed -i 's/[^!.]",/&.",/g' $file


我得到如下结果-

"First sentence",.",


我想要的输出是-

"First sentence.",


如上所示,如何正确解决此问题而不导致不良结果?
另外,如何使第一个字符大写?

修改后的文件应为-

Random stuff,
"First sentence.",
"Second sentence.",
"Third sentence!"
More Random Stuff,

最佳答案

这可能对您有用(GNU sed):

sed -E '/^".*",/{s/[[:alpha:]]/\U&/;s/([^!?.])",$/\1.",/}' file


只关注引号行。如果不是感叹号/问号或句点,则将第一个字母大写并在结束引号前插入句点。

10-08 00:46