文字列の長さを得る
expr は引数にコロンがあると、その右側と左側の文字列を比較して、先頭から何文字までが等しいかという値を返却する。そのため、以下のようにすると文字列の長さが得られる。
expr "string" : '.*'
文字列中に特定の文字列が存在するかを調べる
if echo "$STRING" | grep "$SUBSTRING" > /dev/null then echo "Found it" fi
文字列の余計なホワイトスペースの削除
echo コマンドはタブや連続したホワイトスペースを1つのホワイトスペースに変換し、先頭や末尾にあるホワイトスペースを取り除く。以下のようにすると、余計なホワイトスペースが除去できる。
STRING=`echo $STRING`
文字列から一部を取り出す。
文字列の5番目から7番目を切り出す
# echo "abc:def:ghi" | cut -c5-7
def
区切り文字を:と指定し、2番目のフィールドに該当する部分を切り出す
# echo "abc:def:ghi" | cut -d':' -f2
def
ファイルサイズの調べ方
wc -c file | awk '{print $1}'
引数の値をそのままコマンドに渡す
command ${@+"$@"}
ファイルのゼロクリアいろいろ
いろいろなやり方あります
>file : >file cat /dev/null > file cp /dev/null file
改行コードのCRLF→LF変換
tr -d '\015' < infile > outfile
大文字小文字変換
大文字→小文字変換
$ cat in.txt | tr '[A-Z]' '[a-z]' > out.txt
小文字→大文字変換
$ cat in.txt | tr '[a-z]' '[A-Z]' > out.txt
IDの取得
ユーザIDの取得
UID=`id | sed -e 's/uid=//' -e 's/(.*//'`
ユーザ名の取得
USER=`id | sed 's/uid=.*(\(.*\)) gid=.*/\1/'`
OS名とシステム名を表示する
OSの名前を表示(unameコマンド)
$ uname Linux
ホスト名
$ uname -n web01.etc
全ての情報を表示
$ uname -a Linux web01.etc 2.6.9-55.ELsmp #1 SMP Wed May 2 14:28:44 EDT 2007 i686 i686 i386 GNU/Linux
ファイルの一括置換
optディレクトリ下のhtmlファイル中にある/hogeを/hogehogeに一括置換
find /opt/ -name '*.html' -exec perl -npi -e 's@/hoge@/hogehoge@g' {} \;
バックアップファイルが必要な場合は
find /opt/ -name '*.html' -exec perl -npi.back -e 's@/hoge@/hogehoge@g' {} \;
ディレクトリコピー
directory1以下のディレクトリをdirectory2へコピー
cpコマンド
cd directory1 cp -r . directory2
cpioコマンド
cd directory1 find . -depth -print | cpio -pdum directory2
tarコマンド(directory2が既存の場合)
(cd SourceDir; tar -cf - .) | (cd DestDir; tar -xf -)
ネットワーク越し(rsh)
(cd LocalDir; tar -cf - .) | rsh host "cd RemoteDir; tar -xf -"
tarしてgzip
hoge.tar.gz の内容を表示
gzip -dc hoge.tar.gz | tar tvf -
hoge.tar.gz を展開
gzip -dc hoge.tar.gz | tar xvf -
カレントディレクトリ以下を tar でアーカイブし、gzip で圧縮
tar cvf - . | gzip -c > hoge.tar.gz
hoge.hogeを tar でアーカイブし、gzip で圧縮
tar cvf - ./hoge.hoge | gzip -c > hoge.tar.gz
sedで文字列の削除
sed -e "s/TextToRemove//g"
sedで行頭文字列の削除
sed -e "s/^TextToRemove//"
sedで行末文字列の削除
sed -e "s/TextToRemove\$//"
sedでタブ/スペース変換
sed -e 's/<tab>/<space>/g'
sedで複数のスペースを1個のスペースに変換
sed -e 's/<space><space>*/<space>/g'
sedで行頭のホワイトスペースを削除
sed -e 's/^[<space><tab>]*//'
sedで行末のホワイトスペースを削除
sed -e 's/[<space><tab>]*$//'