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

Bash 如何从文件的每一行(最后一行除外)删除逗号?,bash,shell,sed,grep,Bash,Shell,Sed,Grep,我想删除txt文件中除最后一行之外的每一行中的逗号,我使用了grep-Po.*(?=,$)和sed-e的/$/',但这将删除最后一行,因为它不包含逗号(这是我的理解)。 例如: 1, 2, 3 using the commands above , the result will be: 1 2 而不是: 1 2 3 我将使用以下方法: sed 's/,$//' 它假定没有尾随空格,并从行尾删除逗号。如果没有逗号,则该行保持不变 如果可能有您希望删除的尾随空格,则以下内容应适用于GNU s

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

1,
2,
3

using the commands above , the result will be:
1
2
而不是:

1
2
3

我将使用以下方法:

sed 's/,$//'
它假定没有尾随空格,并从行尾删除逗号。如果没有逗号,则该行保持不变

如果可能有您希望删除的尾随空格,则以下内容应适用于GNU sed:

sed -r 's/,\s*$//'
如果您需要可移植性,那么在任何符合POSIX的系统上都应该可以使用以下功能:

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

您的
grep
命令不起作用,因为它显式地匹配了后跟逗号和行尾的数据,因此没有逗号的行不匹配。
您可以通过匹配后跟逗号和行尾的数据,或直接匹配行尾的数据来修复此问题:

grep -Po '.*(?=,?$)
我倾向于不喜欢在可能实现更简单的实现时使用lookarounds,因此我会避免使用此解决方案,但这可能就是我自己



由于另一个原因,
sed
命令无法工作:它删除了行的最后一个字符,不管这个字符是什么。因此,在您的示例中,第三行中的字符是
3
,删除该字符后,该行将为空。

我将使用以下内容:

sed 's/,$//'
它假定没有尾随空格,并从行尾删除逗号。如果没有逗号,则该行保持不变

如果可能有您希望删除的尾随空格,则以下内容应适用于GNU sed:

sed -r 's/,\s*$//'
如果您需要可移植性,那么在任何符合POSIX的系统上都应该可以使用以下功能:

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

您的
grep
命令不起作用,因为它显式地匹配了后跟逗号和行尾的数据,因此没有逗号的行不匹配。
您可以通过匹配后跟逗号和行尾的数据,或直接匹配行尾的数据来修复此问题:

grep -Po '.*(?=,?$)
我倾向于不喜欢在可能实现更简单的实现时使用lookarounds,因此我会避免使用此解决方案,但这可能就是我自己



由于另一个原因,
sed
命令无法工作:它删除了行的最后一个字符,不管这个字符是什么。因此,在您的示例中,第三行中的字符是
3
,删除该字符后,该行为空。

尝试此操作。在除最后一行($)之外的所有行中,替换结尾处的


尝试此操作。在除最后一行($)之外的所有行中,替换结尾处的


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

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

sed's/,$/'
?非常确定BSD sed不识别
\s
@123非常可能,我只记得使用了
-E
而不是
-r
;我想我将只记录GNU sed
[[:space:]
是POSIXcompliant@123是的,但是记住和写起来也很痛苦:-/@Foudel你应该使用JSON解析器,而不是sed。非常确定BSD sed不会识别
\s
@123非常可能,我只是记得使用
-E
而不是
-r
;我想我将只记录GNU sed
[[:space:]
是POSIXcompliant@123是的,但是记住和写也很痛苦:-/@Foudel您应该使用JSON解析器,而不是sed。