2017-06-14 55 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的

相關問題