【发布时间】:2016-11-11 07:08:31
【问题描述】:
我有一些文件发生了一些错误的正则表达式搜索和替换,它给我留下了以“|”结尾的各种行。我正在尝试创建一个 perl oneliner 来解决这个问题,但似乎无法匹配“|”在行尾。
创建了一个仅包含问题行的示例文件。
$ cat ad.sh.bak2
echo "dbconfig Db side ..." |
date |
echo "ALERT !!! THIS IS PRODUCTION SERVER" |
echo "ERROR: Environment cannot be started! (retvalue=$retvalue)" |
$
尝试了以下方法(将下面的单行更改为仅在匹配时打印而不是我的正常 s///g):
$ cat ad.sh.bak2 |perl -ne '/\|$/ && print'
$ cat ad.sh.bak2 |perl -ne '/\|$ */ && print'
$
如果我去掉“$”,它会匹配这些行(以及我不想要的其他行)。我已确认“|”后没有空格或不可打印的字符(vim "set list" 在每个 "|" 之后立即显示 $)。
不确定我在正则表达式中做错了什么。
任何帮助表示赞赏!
【问题讨论】:
-
好吧,果然,我是个白痴。尝试了您的 s/\|$//gm,Chankey,它对我的文件不起作用,但是当我复制粘贴到一个新文件时它起作用了。仔细查看我的测试文件(以及它生成的文件),并意识到它们是未转换为 unix 的 dos 上传(也忽略了 vim 底部的“dos”标志)。所以我的比赛缺少 ^M。一旦我剥离了这些,它就起作用了!谢谢!附: - 我知道“perl -ne '/\|*/ && print' 不做“搜索和替换”,我这样做只是为了测试正则表达式。
-
我建议查看What should I do when someone answers my question? 如果答案成功,请选择一个并接受它。此外,您还可以对它们进行投票。