我希望替换一个始终位于模式中间带有space
的数字之后的|
。有时我也不希望替换相似的模式(参见示例中的第一行/第二行)。
示例:
12315 asdfea 1 1ffesa
45456 asefasef 1 era
12 asfase
4 4aefs
我需要的是什么:
12315|asdfea 1 1ffesa
45456|asefasef 1 era
12|asfase
4|4aefs
我试过这个:
sed 's/\([0-9][ ][a-zA-Z]\)/|/g' file.txt
然而,这会删除模式,使其看起来像这样:
|sdfea 1 1ffesa
|sefasef 1 era
|sfase
|4aefs
这不是我需要的。
答案 0 :(得分:1)
对于给定的样本输入/输出,
$ sed 's/ /|/' file.txt
12315|asdfea 1 1ffesa
45456|asefasef 1 era
12|asfase
4|4aefs
默认情况下,只会替换第一个匹配项。 g
修饰符将替换所有匹配项
替换数字和字母之间的第一个匹配空格(匹配depends on locale too)
$ sed 's/\([0-9]\) \([a-zA-Z]\)/\1|\2/' file.txt
12315|asdfea 1 1ffesa
45456|asefasef 1 era
12|asfase
4 4aefs
这使用capture group and backreferences。请注意,最后一行未被修改