linuxなどで使うテキスト編集コマンドの使い方で、これさえ知っていればOKというもののまとめ(vi, sed, grep, tr, nkf, diff, sort)。
後半は特に必要とはいえないため適当。重要なのはvi, sed, grepまでかな。
vi
※(数指定)のついているものは、コマンドの前に数を指定することで指定された数だけ該当する操作を行える。
(6h
で6字分左に移動)
コマンドモードと入力モード
- コマンドモード→入力モード
i
: カーソルの直前に挿入(insert)I
: カーソル行の最初に挿入a
: カーソルの直後に挿入(add)A
: カーソル行の最後に挿入o
: カーソルの下の行に挿入O
: カーソルの上の行に挿入
- 入力モード→コマンドモード:
ESC
移動
(ちょうど右手のホームポジション)
h
: 左(数指定)j
: 下(数指定)k
: 上(数指定)l
: 右(数指定)
(ページ移動)
Ctrl-b
: PgUp(back)Ctrl-f
: PgDn(forward)
(行内)
^
: 行頭(正規表現)$
: 行末(正規表現)
(行指定)
Ctrl-g
: 現在の行表示G
: 最終行数字G
: 指定行に移動
コピー、カット、ペースト
x
: 文字削除(数指定)dw
: 単語削除(数指定)dy
: 単語コピー(数)dd
: 行削除(数指定)yy
: 行コピー(数指定)p
: カーソルの下に貼り付けP
: カーソル行に貼り付け)s
: カーソル位置の文字を修正、上書き(数指定)Ctrl-h
: Back SpaceJ
: カーソル行と次行を連結する
undo,redo
u
: 直前の作業の取り消し.
: 直前の作業の繰り返し
検索、置換
:/文字列
: 文字列の検索(/.はエスケープが必要)n
: 下方向への検索N
: 上方向への検索:%s/文字列1/文字列2/g
: ファイル内の文字列1を文字列2に置換(全箇所)
便利なコマンド
:!コマンド
: ローカルコマンド実行
保存、終了
:w!
: 保存:q!
: 終了:wq!
: 保存して終了:w ファイル名
: ファイル名として保存
sed
行や文字列の置換、削除、抽出を行うコマンド
sed -e コマンド1 -e コマンド2 ... infile > outfile
sed -i -e コマンド1 -e コマンド2 ... infile
置換(s
コマンド)
あるファイル内の文字列1をすべて文字列2に置換し、ファイルに出力する
sed -e 's/文字列1/文字列2/g'置換するファイル > outfile
find . -name \*.html -exec sed -i -e 's/ onkeypress="[^"]*"//g''{}'\;
指定行の文字列1を文字列2に置換する
sed -e '5s/文字列1/文字列2/g' infile > outfile
sed -e '1,10s/文字列1/文字列2/g' infile > outfile
sed -e '20,$s/文字列1/文字列2/g' infile > outfile
パターンにマッチした行のみ、文字列1を文字列2に置換する
sed -e '/パターン/s/文字列1/文字列2/g' infile > outfile
これらを組み合わせて、例えば1行目から最初の空行までを置換する
sed -e '1,/^$/s/文字列1/文字列2/g' infile > outfile
#
ではじまる行以外を置換する
sed -e '/^#/!s/文字列1/文字列2/g' infile > outfile
*.pl
ファイルだけ1行目の/usr/local/bin
を/usr/bin
に置換
find ./ -type f -name *.pl | xargs sed -i -e '1s|/usr/local/bin/|/usr/bin/|'
削除(d
コマンド)
文字列1を含むすべての行を削除
sed -e '/文字列1/d' infile > outfile
1行目だけ削除して、すべての行頭に""
囲みのファイル名を付け、まとめて1個のファイルに出力
ls *csv | xargs -I% sed -e '1d' -e 's/^/"%",/g' % >> a.csv
抽出(p
コマンド)
該当する行だけを表示する-n
オプションと、
条件にマッチした行のみ取り出すp
コマンドをセットで使う。
最終行だけ削除して上書き
sed -i -n -e '$!p' a.csv
便利なオプション
拡張正規表現
+ ? { } ( ) |
を使う場合、-e
ではなく-E
を指定する。
以下は同じとなる
sed -i -e 's/^#\(.*NOPASSWD: ALL\)/\1/' /etc/sudoers
sed -i -E 's/^#(.*NOPASSWD: ALL)/\1/' /etc/sudoers
sed のコマンドスクリプトを別ファイルに記述しておいて、それを実行する
sed -f スクリプトファイル infile > outfile
参考
http://hydrocul.github.io/wiki/commands/sed.html
grep
ファイルからパターンを検索する
grep パターン infile
ファイル1からパターンを検索し、その含まれる行のみをファイル2に出力する
grep パターン infile > outfile
コマンドの出力結果からパターンの存在する行のみ表示する
コマンド | grep パターン
パターンに正規表現を含む場合はegrep
で。
tr
パターン1をパターン2に置換
tr パターン1 パターン2 < infile > outfile
DOS の CR コードを削除
tr -d '\r'< infile > outfile
nkf
文字コード変換
nkf [option] infile > outfile
find path -type -f -name "*.js"| xargs nkf -w --overwrite
--overwrite
: ファイルに上書き
出力する漢字コードの指定
-j
: JIS で出力(デフォルト)-e
: EUC で出力-s
: Shift-JIS で出力-w
: UTF-8 で出力
入力する漢字コードの指定(なくてもよい)
-J
: JIS で入力-E
: EUC で入力-S
: Shift-JIS で入力-W
: UTF-8 で入力
出力する改行コードの指定(デフォルトでは変換なし)
-Lu
:LF
(Unix)-Lw
:CR+LF
(Windows)-Lm
:CR
(Mac)-c
: 行末にCR
を追加-d
: 行末からCR
を削除-m
: MIME を解読する
diff
2つのテキストファイルの違いを出力する
diff file1 file2
sort
並べ替え
sort オプション ファイル名
コマンド | sort オプション
オプション
- -k m(,n)
: フィールド番号m
(からn
)をキーにしてソートする(番号は1から始まる)
- -t 区切り文字
: フィールドの区切り文字を指定する(デフォルトではスペースとタブ)
- -n
: 数字を文字列ではなく値とみなす
- -f
: 大文字小文字を区別しない
- -r
: 逆順表示