如何使用sed仅替换文件中的特定空格?
我在一个文件中有这个内容,我想用管道符号 ( |)替换某些位置的空格。我为此使用了sed,但它正在替换字符串中的所有空格。但我不想替换第 3 个和第 4 个字符串的空间。
如何实现这一目标?
输入:
test test test test
我的尝试:
sed -e 's/ /|/g file.txt
预期输出:
test|test|test test
实际输出:
test|test|test|test
回答
如果原始输入不包含任何管道字符,你可以这样做
sed -e 's/ /|/g' -e 's/|/ /3' file
保留第三个空格。否则请参阅其他答案。
回答
sed 's/ /
/3;y/n / |/'
由于换行符不能出现在 sed 模式空间中,您可以将第三个空格更改为换行符,然后将所有换行符和空格更改为空格和管道。
GNU sed 可以n在替换文本中使用:
sed 's/ /n/3;y/n / |/'