Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

linuxのテキスト編集コマンド(vi, sed, trなど)まとめ

$
0
0

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 Space
  • J: カーソル行と次行を連結する

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: 逆順表示


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>