我在这里看到了几个与我所要求的相近的例子,但并不完全。
我有一些以管道分隔的平面文件,这些文件有一些无关的列数据,我想用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。
答案 0 :(得分:3)
不要逃离管道。
$ sed 's/|ignore//' table1.txt > filtered.txt
适用于我的机器。 (GNU sed on Cygwin。)
这里的想法是\|
是正则表达式管道,而不是文字管道。我不太清楚如何解决这些问题,但要在sed正则表达式中使用(
,{
或|
,您必须逃避它们。但是[
不会被转义,除非你想要文字字符。
答案 1 :(得分:3)
将\|
更改为|
。你不想要另一种选择,你想要一个文字管道。
或者,如果您使用\|
,请将-r
传递给sed,以表明您需要扩展语法。
答案 2 :(得分:0)
几种可能的解决方案here。另外,为什么不使用cut?