我在这里看到了几个例子,这些例子与我的要求很接近,但并不完全是这样。
我有一些管道分隔的平面文件,这些文件有一些无关的列数据,我想使用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
但这似乎没什么用。我做错了什么?
注意:这是GNU for Windows。
发布于 2011-09-19 11:16:36
别从管子里逃出来。
$ sed 's/|ignore//' table1.txt > filtered.txt
在我的机器上工作。(GNU on Cygwin.)
这里的想法是,\|
是regex管道,而不是文字管道。我不太知道如何解决这些问题,但是要在sed regex中使用(
、{
或|
,必须将它们转义。但是[
是不会转义的,除非你想要文字字符。
发布于 2011-09-19 11:17:05
将\|
更改为|
。你不想要另一种选择,你想要一个文字管道。
或者,如果使用\|
,则将-r
传递给sed以指示您希望使用扩展语法。
发布于 2011-09-19 11:20:03
几种可能的解决方案这里。还有,为什么不使用剪切呢?
https://stackoverflow.com/questions/7476045
复制相似问题