在某些情况下,Sed / regex适用于子字符串,但不适用于其他情况

时间:2014-04-11 00:08:01

标签: regex sed

我有两个字符串。短暂的...

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

这很好。然而,当我在长的那个上运行相同的正则表达式时,我得到以下结果。

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"

1 个答案:

答案 0 :(得分:0)

为什么要使用猫?

sed -e 's/\([^\\]\)\\0[[:space:]]/\1/g' YourFile

直接工作(比如@ dg99)没有echo

的问题