2017-06-14 62 views
0

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

1, 
2, 
3 

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

而不是:

1 
2 
3 
+0

'sed中的/,$ //''? – 123

回答

2

我将使用以下:

sed 's/,$//' 

它假设没有结尾的空白,并从该线的端删除一个逗号。如果没有逗号,它会保持未修改的行。

如果有可能是尾随,你想去掉空格,下面应该与GNU工作的sed:

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

如果您需要的便携性,下面应该任何POSIX兼容的系统上工作

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

grep命令没有工作,因为它明确地匹配的数据后跟一个逗号和线的末端,所以没有逗号线分别为不匹配。
你可以有固定的,通过匹配数据,接着或者由逗号和线的末端,或者直接行的末尾:

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

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


sed命令没有的另一个原因是工作:它删除行的最后一个字符,不管这个角色了。因此,举个例子,在第三行中,字符为3,当删除时,该行空了。

+0

很确定BSD sed不会识别'\ s' – 123

+0

@ 123很可能,我只记得使用'-E'而不是'-r';我想我只会记录GNU sed – Aaron

+0

''[[:space:]]'是符合POSIX的 – 123

0

试试这个。将最后一行替换为最后一行($)以外的所有行。

sed '$ ! s/,$//' 
0

命令tr -d [:punct:] < file.txt中删除所有的标点字符file.txt的

相关问题