我正在使用 shell 脚本,如果最后一个字符是,我想在行尾添加一个空格:,.-
我试过sed 's/,.-\r\n/,.- \r\n/g' part2.out > part3.out
了,但没有用,我错过了什么?
这应该工作 -
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 ... $
如果你有CR+LF
行尾,你可以尝试:
sed '/[.,-]\r/ {s/\r/ A/}'
(使用$
而不是\r
作为LF
换行符)
用于$
匹配行尾,并转义.
:
sed 's/,\.-$/,.- /'
您可能也应该使用&
,并且您可能更喜欢仅在行匹配时进行替换:
sed '/,\.-$/s//& /'
由于您的行似乎具有 DOS 行尾,您可能希望使用dos2unix
或其他更适合的实用程序来处理它们。一种简单(但不可靠)的解决方案是只删除\r
字符,因为您几乎可以肯定实际上并不希望它们出现在数据中:
tr -d \\r < part2.out | sed 's/,\.-$/& /' > part3.out
可能已经足够好了。如果 Jaypal 是正确的,并且您尝试匹配以任何字符,
,结尾的任何行.
,或者-
不是以 string 结尾,.-
,那么您想要:
sed 's/[,.-]$/& /'