Edited at

Linux実行コマンド記録

More than 3 years have passed since last update.

実際に使用したコマンドを記録する


特定の文字列を含むファイルを検索して文字を置き換える

$ 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