【发布时间】:2014-05-24 22:35:51
【问题描述】:
我有两个字符串。短的……
eNews: arch 2002\0 N N
...长的包含短的...
449 5344 NULL 2002-03-07 21:17:55 2002-03-07 21:17:55 2002-03-07 21:17:56 2002-03-07 21:17:55 18 N sent aqabmdViRA regular 3NULL NULL NULL NULL NULL NULL NULL NULL fakeemail@fake.com Boston Images eNews: March 2002\0 N N N NULL N NULL 2014-04-10 20:14:04
我正在尝试使用 sed 替换 \0,但前提是它不是 \0(因为它可能是日期的一部分)。每一行都在自己的文件中,我正在使用以下正则表达式...
cat (file) | sed 's/\([^\\]\)\\0 /\1 /g'
在第一个字符串上,我得到以下结果...
eNews: arch 2002 N N
这很好。但是,当我在 long 上运行相同的正则表达式时,我得到以下结果。
449 5344 NULL 2002-03-07 21:17:55 2002-03-07 21:17:55 2002-03-07 21:17:56 2002-03-07 21:17:55 18 N sent aqabmdViRA regular 3NULL NULL NULL NULL NULL NULL NULL NULL fakeemail@fake.com Boston Images eNews: March 2002\0 N N N NULL N NULL 2014-04-10 20:14:04
这仍然包含“\0”,我不知道为什么。有人有什么建议吗?
编辑:当我将该行回显到 cat 时,该代码有效,但在我的 csv 文件中无效。
tail test4.csv
'449 5344 NULL 2002-03-07 21:17:55 2002-03-07 21:17:55 2002-03-07 21:17:56 2002-03-07 21:17:55 18 N sent aqabmdViRA regular 3 NULL NULL NULL NULL NULL NULL NULL NULL fakeemail@fake.com Boston Images eNews: March 2002\0 N N N NULL N NULL 2014-04-10 20:14:04'
cat test4.csv |sed 's/\([^\\]\)\\0 /\1 /g'
'449 5344 NULL 2002-03-07 21:17:55 2002-03-07 21:17:55 2002-03-07 21:17:56 2002-03-07 21:17:55 18 N sent aqabmdViRA regular 3 NULL NULL NULL NULL NULL NULL NULL NULL fakeemail@fake.com Boston Images eNews: March 2002\0 N N N NULL N NULL 2014-04-10 20:14:04'
编辑 2:根据要求,键入 sed 并键入 cat
type sed
sed is /bin/sed
type cat
cat is /bin/cat
cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"
【问题讨论】:
-
你确定吗?它对我有用......
-
我只是通过复制行来测试它,它确实有效。当我直接从文件(test3.csv 和 test4.csv)中捕获它们时,它不起作用。我不知道发生了什么。
-
cating from files 似乎也对我有用。 :( -
该死的。非常感谢。我在这里不知所措。
-
您能否在帖子中包含
type cat和type sed的结果?还有你用的是什么操作系统? Linux、OS X、...?