仅替换 sed 中匹配模式的一部分

仅替换 sed 中匹配模式的一部分

对于具有相同结构的数万行,我想从这里开始(例如):

abcd 12345 qwerty asdfg

...到这里:

abcd 12345,qwerty asdfg

...和

sed 's/[0-9]\ [A-Z]/,/g'

我可以匹配右边的空格加上它周围的两个字符(5 q),但在替换中我得到(显然):

abcd 1234,werty asdfg

此外,我更喜欢在 Linux Shell 中执行此操作

我如何才能匹配并替换每一行中仅以数字开头和以字母结尾的空格?你能建议我使用另一种工具(甚至方法)来完成此操作吗?

答案1

尝试:

$ echo 'abcd 12345 qwerty asdfg' | sed -E 's/([[:digit:]]) ([[:alpha:]])/\1,\2/g'
abcd 12345,qwerty asdfg

笔记:

  1. 我们添加了-E扩展的正则表达式语法。

  2. [:digit:][:alpha:]代替0-9A-Z以确保unicode安全。

  3. 括号用于创建组,我们可以在替换文本中引用。在我们的例子中,\1引用数字并\2引用字母。

相关内容