使用sed / regex删除字符串中的最后一个字符时遇到问题

时间:2015-03-20 00:57:23

标签: regex linux bash

我正在尝试从CSV中的所有行中删除“尾随”。我正在使用RedHat Linux。

我能够在VIM中成功完成%s/"$//g

然而,执行sed -e 's/"$//g'不起作用(在终端中,当我将它作为bash脚本的一部分时)。我做的一个类似的调用是从所有行中移除LEADING,sed -e 's/^"//g'可以工作,所以我非常困惑!特别是因为它适用于VIM。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我怀疑您的文件是DOS格式。试试这样:

$ cat file
line1"
line2"
line3"
$ sed -e 's/"$//' file
line1"
line2"
line3"
$ sed -e $'s/"[\r]\\?$//' file
line1
line2
line3
$

要检查文件是否为DOS格式,您可以:

$ file file
file: ASCII text, with CRLF line terminators
$ head -n 1 file | hexdump -C
00000000  6c 69 6e 65 31 22 0d 0a                   |line1"..|
00000008
$

dos2unix(和unix2dos)等工具可供您在必要时进行转换。

Vim在处理不同格式的文件方面要聪明得多,所以vim可以按预期处理它并不会感到惊讶。