我想删除txt文件中除最后一行之外的每一行的逗号,我使用了grep -Po '.*(?=,$)
和sed -e 's/.$//'
但这会删除最后一行,因为它不包含逗号(这是我的理解)。
一个例子:
1,
2,
3
using the commands above , the result will be:
1
2
而不是:
1
2
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