sed从行尾删除字符模式?

时间:2011-09-19 19:11:58

标签: regex sed

我在这里看到了几个与我所要求的相近的例子,但并不完全。

我有一些以管道分隔的平面文件,这些文件有一些无关的列数据,我想用sed删除它们。基本结构如下:

Column1|Column2|Column3|ignore
data1|data2|data3|ignore
data4|data5|data6|ignore

我想要一个使用sed的表达式,它将产生:

Column1|Column2|Column3
data1|data2|data3
data4|data5|data6

这应该是愚蠢的,但总是正则表达式和sed设法伤害我的大脑。我认为这样可行:

sed "s/\|ignore//" table1.txt >filtered.txt

但这似乎什么都不做。我做错了什么?

注意:这是Windows的GNU sed。

3 个答案:

答案 0 :(得分:3)

不要逃离管道。

$ sed 's/|ignore//' table1.txt > filtered.txt

适用于我的机器。 (GNU sed on Cygwin。)

这里的想法是\|是正则表达式管道,而不是文字管道。我不太清楚如何解决这些问题,但要在sed正则表达式中使用({|,您必须逃避它们。但是[不会被转义,除非你想要文字字符。

答案 1 :(得分:3)

\|更改为|。你不想要另一种选择,你想要一个文字管道。

或者,如果您使用\|,请将-r传递给sed,以表明您需要扩展语法。

答案 2 :(得分:0)

几种可能的解决方案here。另外,为什么不使用cut?