使用sed替换句号完全停止后跟空格

nei*_*ilH 1 bash sed

我想在一个csv的title字段(field2)中替换一个完整的停止,后面跟一个空格:

csv示例:

8389383, hello my.friend,839083083,3390903
Run Code Online (Sandbox Code Playgroud)

预期产量:

8389383, hello my. friend,839083083,3390903
Run Code Online (Sandbox Code Playgroud)

我可以使用以下行成功地用空格替换csv中的句号:

sed -r ':b s/^([^,]*,[^,]*)\./\1 /g; t b' csv
Run Code Online (Sandbox Code Playgroud)

但是,我想用一个句号替换句号,后跟一个空格.我试过了:

sed -r ':b s/^([^,]*,[^,]*)\./\1. /g; t b' csv
Run Code Online (Sandbox Code Playgroud)

但这会挂起并且不会产生结果.

我可以添加什么线来允许这个?

编辑 - 只是要添加,我想要替换的字段2(标题字段)中可能有多个句号.我也不希望此规则适用于csv中的任何其他字段.

sjs*_*sam 5

awk 最适合这类工作

为了替换第二个字段中的所有全站点

 awk -v FS="," -v OFS="," '{gsub(/\./,". ",$2)}1' file.csv > tmpfile && mv tmpfile file.csv

8389383, hello my. friend,839083083,3390903
8389383, hello my. fri. end,839083083,3390903
Run Code Online (Sandbox Code Playgroud)

  • awk似乎是最好的选择,因为我们可以有选择地为第二个字段应用`g`标志 (2认同)