如何在行尾添加一个空格?

时间:2013-05-30 13:59:55

标签: unix sed sh darwin

我正在使用shell脚本,如果最后一个字符是:,我想在行尾添加一个空格:.-

我已经尝试了sed 's/,.-\r\n/,.- \r\n/g' part2.out > part3.out但是它不起作用,我错过了什么?

3 个答案:

答案 0 :(得分:1)

使用$匹配行尾,并转义.

sed 's/,\.-$/,.- /'

您也应该使用&,如果该行匹配,您可能更愿意只进行替换:

sed '/,\.-$/s//& /'

由于您的行似乎有DOS行结尾,您可能希望使用dos2unix或其他更适合的实用程序来处理它们。一个简单(但不健壮)的解决方案就是删除\r个字符,因为您几乎肯定不会在数据中想要它们:

tr -d \\r < part2.out | sed 's/,\.-$/& /' > part3.out

可能已经够好了。如果Jaypal是正确的,并且您尝试匹配以任何字符,.-结尾的任何行,而不是以字符串,.-结尾,那么你想要的:

sed 's/[,.-]$/& /'

答案 1 :(得分:1)

这应该有效 -

sed 's/\([\.,-]\)$/\1 /g' input_file

测试:cat -vet将显示特殊的非打印字符

$ cat -vet ff
col1a col2a col3a col4a col5a col6a XXXXXXAAAAA col8a ...$
col1b col2b col3b col4b col5b col6b XXXXXXBBBBB col8b ..-$
col1c col2c col3c col4c col5c col6c XXXXXXCCCCC col8c ..,$
col1d col2d col3d col4d col5d col6d XXXXXXDDDDD col8d ...$

$ sed 's/\([\.,-]\)$/\1 /g' ff | cat -vet
col1a col2a col3a col4a col5a col6a XXXXXXAAAAA col8a ... $
col1b col2b col3b col4b col5b col6b XXXXXXBBBBB col8b ..- $
col1c col2c col3c col4c col5c col6c XXXXXXCCCCC col8c .., $
col1d col2d col3d col4d col5d col6d XXXXXXDDDDD col8d ... $

答案 2 :(得分:1)

如果您有CR+LF行结尾,则可以尝试:

sed '/[.,-]\r/ {s/\r/ A/}'

(如果$作为换行符,请使用\r代替LF