sh
for文をワンライナーで記載した例
$ for i in a b c d e ; do echo $i ; done
バッククォートで標準出力を渡す例
$ for i in `ls /tmp` ; do echo $i ; done
findの例
$ find /var/log -name "*log" -mtime -3 -type -f
$ find . -type f -exec grep -li aaa {} \;
$ find . -type f | xargs grep -li aaa
$ for i in `find . -type f`; do diff /work/$i $i > /dev/null 2>&1; if [ $? -ne 0 ]; then echo "diff /work/$i $i"; fi; done
この場合、xargsが呼び出すechoは1回
$ echo a b c | xargs echo
この場合、xargsが呼び出すechoは3回
$ echo a b c | xargs -n1 echo
正規表現を使わずにnetstatの結果をgrepする
$ netstat -an | grep tcp | grep :80 | grep LISTEN
正規表現を使ってnetstatの結果をgrepする
$ netstat -an | grep -e "^tcp.*:80.*LISTEN"
ディレクトリの存在をチェックし、なければ作成
$ test -d /tmp/foo || mkdir /tmp/foo
/usr/local直下のApacheをすべてrestart
$ for i in `ls -d /usr/local/apache*` ; do sudo $i/bin/apachectl restart ; done
返り値チェックを追加
$ for i in `ls -d /usr/local/apache*` ; do sudo $i/bin/apachectl restart ; test $? -ne 0 && echo "[ Apache Restart Failed ]" ; done
ログファイルを圧縮
$ find /var/log -name "*.log" -mtime 3 -type f | xargs -n1 sudo gzip --best
ログファイルから特定のアクセスを抽出
$ find /var/log -name "*.log" -type f | grep -e "^127.0.0.1.*"
awk
入力行の中でもっとも長いものの長さを出力
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' data
50文字を越える長さの行を出力
$ awk 'length($0) > 50' data
入力行から空行を取り除く
$ awk 'NF > 0' data
入力行の行数を数える
$ awk 'END { print NR }' data
awkでcsvの特定行を置換して出力
$ awk -F, 'BEGIN{OFS=","} { if(NR%2==1 && $1~/a/){ sub(",b\"$", ",c\"$", $2); print $0} else print $0 }' input.csv > output.csv
0 件のコメント:
コメントを投稿