首页 > 解决方案 > 如何使用 sed 仅替换文件中的特定空格?

问题描述

我在一个文件中有这个内容,我想用管道符号(|)替换某些位置的空格。我为此使用了sed,但它正在替换字符串中的所有空格。但我不想替换第 3 和第 4 个字符串的空间。

如何做到这一点?

输入:

test test test test

我的尝试:

sed -e 's/ /|/g file.txt

预期输出:

test|test|test test

实际输出:

test|test|test|test

标签: sed

解决方案


sed 's/ /\
/3;y/\n / |/'

由于换行符不能出现在 sed 模式空间中,您可以将第三个空格更改为换行符,然后将所有换行符和空格更改为空格和管道。

GNU sed 可以\n在替换文本中使用:

sed 's/ /\n/3;y/\n / |/'

推荐阅读