我正在使用shell脚本,如果最后一个字符是:,我想在行尾添加一个空格:.-
我已经尝试了sed 's/,.-\r\n/,.- \r\n/g' part2.out > part3.out
但是它不起作用,我错过了什么?
答案 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