用sed

时间:2018-01-25 10:17:52

标签: sed

我希望替换一个始终位于模式中间带有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

这不是我需要的。

1 个答案:

答案 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。请注意,最后一行未被修改