実際に使用したコマンドを記録する
特定の文字列を含むファイルを検索して文字を置き換える
$ grep -lr -P "x+" * | xargs sed -b -i~ -r -e 's/(x+)/\1000/g'
grep の -P は Perl 正規表現指定
sed の -b は、Cygwin で CR+LF が LF に変換されないようにバイナリモードで開くように指定。
sed の -r は、拡張正規表現指定
sed の 後方参照は 1桁だけ。対象文字列が "xxx" だと "xxx000" になる。
日付ごとのディレクトリにファイルを移動する
以下のようなファイルがあるとする。
xxx-20160301.bin
xxx-20160302.bin
xxx-20160303.bin
xxx-20160304.bin
これらのファイルをファイル名に含まれる日付をディレクトリ名としたディレクトリを作成して、そこへ移動したい。
$ for d in $(\ls -1 xxx-2016* | sed -e "s/^xxx-\([0-9]*\)\.bin$/\1/g" | sort | uniq); do \
[ -d $d ] || mkdir $d; \
mv xxx-$d.bin $d; \
done
一応、ワンライナー。
参考:どのUNIXコマンドでも使える正規表現 - Qiita
sed は、"+"が使えなかったのか。カーリブラケット{}にはエスケープ必要と。
以下の変形でもいいかも
$ for d in $(\ls -1 *.bin | sed -e 's/\(.*\)\([0-9]\{8\}\)\(.*\)/\2/g' | sort ); do echo $d; done
.git 以外で20日以内に修正したファイルを検索する
find . -not -path "*/.git/*" -a -mtime -20