如何从除最后一行之外的文件的每一行删除逗号?

时间:2017-06-14 09:53:17

标签: bash shell sed grep

我想删除txt文件中除最后一行之外的每一行的逗号,我使用了grep -Po '.*(?=,$)sed -e 's/.$//'但这会删除最后一行,因为它不包含逗号(这是我的理解)。 一个例子:

1,
2,
3

using the commands above , the result will be:
1
2

而不是:

1
2
3

3 个答案:

答案 0 :(得分:2)

我会使用以下内容:

sed 's/,$//'

它假设没有尾随空格并从行尾删除逗号。如果没有逗号,则不会修改该行。

如果可能存在要删除的尾随空格,则以下内容应与GNU sed一起使用:

sed -r 's/,\s*$//'

如果您需要可移植性,以下内容适用于任何符合POSIX标准的系统:

sed 's/,[[:space:]]*$//'

您的grep命令无效,因为它明确地匹配数据后跟逗号和行尾,因此没有逗号的行不匹配。
你可以通过匹配数据来修复它,然后用逗号和行的结尾,或者直接在行的末尾:

grep -Po '.*(?=,?$)

当一个更简单的实现可能时,我倾向于不喜欢使用lookarounds,所以我会避免这个解决方案,但那可能就是我。

你的sed命令由于其他原因而无效:它删除了一行的最后一个字符,无论这个字符是什么。因此,在您的示例中,第三行中的字符为3,删除时会将该行留空。

答案 1 :(得分:0)

试试这个。最后在除最后一行($)之外的所有行中放置。

 sed '$ ! s/,$//'

答案 2 :(得分:0)

命令tr -d [:punct:] < file.txt删除file.txt

中的所有标点字符