Bash 如何从文件的每一行(最后一行除外)删除逗号?
我想删除txt文件中除最后一行之外的每一行中的逗号,我使用了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
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。