1

シェル スクリプトを使用しており、最後の文字が ,.- の場合、行末にスペースを追加したい

試してみましsed 's/,.-\r\n/,.- \r\n/g' part2.out > part3.outたが、うまくいきませんでした。何が欠けていますか?

4

3 に答える 3

1

$行末に一致させるために使用し、次をエスケープし.ます。

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

おそらく&同様に使用する必要があり、行が一致する場合にのみ置換を行うことを好むかもしれません:

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

あなたの行には DOS の行末があるように見えるので、dos2unixまたはそれに適した他のユーティリティを使用して処理することをお勧めします。簡単な (しかし堅牢ではない) 解決策の 1 つは、文字を削除する\rことです。これは、ほとんどの場合、実際には文字をデータに含めたくないためです。

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

おそらく十分です。Jaypal が正しく、 string で終わるのではなく,、 , ., またはのいずれかの文字で終わる任意の行と一致させようとしている場合は、次のようにします。-,.-

sed 's/[,.-]$/& /'
于 2013-05-30T14:04:37.130 に答える
1

CR+LF行末がある場合は、次を試すことができます。

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

(改行文字の場合の$代わりに使用)\rLF

于 2013-05-30T16:10:52.657 に答える
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 ... $
于 2013-05-30T14:19:00.003 に答える