【问题标题】:Sed/regex works on a substring in some cases, but not other casessed/regex 在某些情况下适用于子字符串,但在其他情况下不适用
【发布时间】: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 cattype sed 的结果?还有你用的是什么操作系统? Linux、OS X、...?

标签: regex sed


【解决方案1】:

为什么要使用猫?

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

直接工作(如@dg99)没有回声问题

【讨论】:

  • 谢谢。我正在使用一个脚本,并试图不要改变太多。这似乎可以解决问题,尽管我仍然不知道为什么。
猜你喜欢
  • 2010-10-12
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2019-08-08
相关资源
最近更新 更多