1

Ubuntu 12.04 と vim 2.22.0 を使用して、vim エディター内で次を使用します。

:9;13;17;21s/\d\+/1/

^M の前の数字 (場合によっては末尾のない数字のみ) に一致し、それらを 1 に変更します。このパターンは、行 #9、13、17、および 21 の先頭でのみ発生します。つまり:

vi _ccc_info_datasets:

...
=====
2
../../automotive_susan_data/2.pgm output_large.corners.pgm -c > ftmp_out
691^M  // ---------> change to 1^M
=====
...

私が理解しているように、同じことは sed のようにはできません:

find . type f  -name "_ccc_info_datasets" -exec sed -i '9;13;17;21s/\d\+/1/' {} \;

bash で複数のファイルを変更する場合。私が試してみました :

find . type f  -name "_ccc_info_datasets" -exec sed -i '9;13;17;21s/[0-9]{1;\}/1/' {} \;

エラーなしで実行されますが、結果はありません。どんな助けでも大歓迎です;)

4

1 に答える 1

0

そのようにsedを使用することはできません。-e次のように、スイッチを使用して複数の sed 置換を使用する必要があります。

sed -i.bak -e '9s/[0-9][0-9]*\('$'\r''\)/1\1/' -e '13s/[0-9][0-9]*\('$'\r''\)/1\1/' \
    -e '17s/[0-9][0-9]*\('$'\r''\)/1\1/' -e '21s/[0-9][0-9]*\('$'\r''\)/1\1/' file

更新: awk はインライン編集をサポートしていませんが、awk を使用すると、このタスクがよりクリーンになると思います。 以下のawkコマンドを検討してください:

awk 'NR ~ /^9|13|17|21$/{sub(/[0-9]+\r$/, "1\r")}1' file > _temp && mv _temp file
于 2013-07-31T09:13:12.700 に答える