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

ed, ex, echo, cat : ラインエディターを用いた編集

$
0
0

Unix系 どんな環境でも編集を行う方法

備忘録として作成

スクリーンエディターが使えない局面

  • 最近はVSCodeやAtomなど優れたエディターがあり、vim/viやemacsも依然人気がある
  • しかしDockerなど限定された環境や、相当年数が経過したシステム設定を変更しようとすると、いつものエディターが使えない場合もある
  • そこでどんな局面でも設定を行うレスキュー策を自分なりにまとめた
  • ラインエディターのed,ex、ファイル表示用のcat、文字列出力用のechoを使う例を記載

ed

  • UNIXオペレーティングシステム用のラインエディタ。作者はケン・トンプソン
  • ほぼ全てのUnixで使える
  • これを基に ex , vi が作られたので vi のコマンドラインモード(exモード)と操作方法は似ている
  • 起動方法:
$ ed -p @ test      // edがコマンド名。 "-p @"は@をコマンド入力待ちを認識する文字にする設定、 testはファイル名
95             // ファイルの文字数が表示される
@
  • テキストファイルの表示:
@,p            // 待ち受け表記 @ (上で指定)に対して ",p"を入力すると全行表示
                        // ","は、ファイルの全行を示し、pはprintを示すので、",p"は全行表示となる
This is No.1 line.
This is No.2 Line.
This is No.3 Line.

@.             // "."は、いわゆるカーソル行を示す。"."と".p"は同じ
This is No.3 Line.
@

@.=                     // ".="は、行番号を示す。".="と".=p"は同じ
3
@

@2                     // 行移動は直接行番号を入力
This is No.2 Line.
@
  • 文字入力: aコマンド カーソル行の下に文章を追加
  • 注:下記はカーソル行が2行目に移動した状態とする
  • vi/vim同様にiコマンドも使える。iコマンドの場合、カーソル行の上に文章が追加される
@a                     // "a" (addコマンド)でテキスト入力モードに移行。入力が終わったら"."を入力
This line has been inserted.
The add command can insert multiple lines.     // 複数行の入力が可能
.                   // ここでテキスト入力完了
@

@,p           // 上記の入力を表示
This is No.1 line.
This is No.2 Line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 Line.
@
  • 行の削除: 行単位で削除となり文字や単語単位の削除は出来ない(後述の置換は可能)
@d                     // カーソル行を削除
@

@4d           // 4行目を削除
@

@2,25d                 // 2〜25行をまとめて削除
@
  • 行の変更: cコマンド 指定行を削除して新しい文章を挿入(複数行可能)。
@,p           // 変更前を表示
This is No.1 line.
This is No.2 Line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 Line.
@

@4,5c                  // 4〜5行目を削除して新たな行と入れ替える
This is No.4 Line.
.                      // テキスト入力完了

@,p                    // 変更後を表示
This is No.1 line.
This is No.2 Line.
This line has been inserted.
This is No.4 Line.
@
  • 検索: /または?に検索キーワード 指定行を削除して新しい文章を挿入(複数行可能)。
  • 置換: sコマンド s/old/new/で、oldをnewに置き換える。この置換は、行単位で一番最初に一致した文字列のみ置換するので、一致する文字列を全て変換する場合はgオプションが必要。s/old/new/g
  • 保存: wコマンド vi同様。変更内容を保存。ファイル名を指定するとそのファイル名で保存。
  • 終了: qコマンド vi同様。
@w
126
@q

ex

  • 1976年にBill Joy によって書かれたUnixシステム用のラインエディタ
  • exは最終的にフルスクリーンのビジュアルインターフェイスを与えられ、viとなった
  • 現在exはviの一部として実装されている。viには「exモード」があり、exコマンドを使用して呼び出すか、vi内から":"を入力して呼び出す 。exとviの機能は重複しているが、exコマンドでしか実行できないものもあるため、viを使用する場合にも役立つ。つまり現在に於いてex=vi(の一部)と考えて良い。
  • よってexがある環境ではviが使えるはずなので、exをわざわざ使う局面はまず無い
  • 起動方法:
$ ex test           // exがコマンド名。 testはファイル名
"test" 6L, 126C
Entering Ex mode.  Type "visual" to go to Normal mode.    //visualと打つとvi/vimの標準画面に移動する
:
  • テキストファイルの表示: %コマンド
:%                      // 全行を表示
This is No.1 line.
This is No.2 Line.
This is No.3 Line.
:

:2                     // 行移動は直接行番号を入力
This is No.2 Line.
:
  • 文字入力: aコマンド カーソル行の下に文章を追加 
  • 注:下記はカーソル行が2行目に移動した状態とする
  • vi/vimと同じなのでiコマンドも使える。iコマンドの場合、カーソル行の上に文章が追加される。
:a                     // "a" (addコマンド)でテキスト入力モードに移行。入力が終わったら"."を入力
This line has been inserted.
The add command can insert multiple lines.     // 複数行の入力が可能
.                   // ここでテキスト入力完了
:

:%           // 上記の入力を表示
This is No.1 line.
This is No.2 Line.
This line has been inserted.
The add command can insert multiple lines.
This is No.3 Line.
:
  • 検索、置換、保存。終了はvi/vimと同一

cat

  • catはUNIXの標準コマンドで、ファイルを連結させたり表示したりするのに用いる
  • 連結することを意味する「catenate」の略
  • catを用いてのテキストファイルの作成も可能。但し新規作成のみで後からの編集は不可。
  • catコマンドに標準入力-を渡し(渡さなくても可能)、複数行を書き込み完了したらCtl+C( Ctl+D )で抜ける

viを開発したビル・ジョイ氏は「どのエディターが使いやすいか」というインタビューに対し、「catが使いやすい」と答えたとのこと。編集不可で後戻りも出来ないツールが使いやすいというのは常人では理解不能な世界。

$ cat > test.txt      // 指定したファイル名の中身は、ゼロからの新規作成になる事に注意
This is No.1 line.
This is No.2 Line.
This is No.3 Line.
^C                      // 編集作業が完了したら Ctl+C ( Ctl+D )
$

$ cat test.txt         // 編集内容を確認
This is No.1 line.
This is No.2 Line.
This is No.3 Line.
$

echo

  • Unixのechoコマンドは、入力として引数で与えられた文字列をそのまま出力するコマンド
  • 何らかの理由であらゆる外部コマンドが使えないなどの非常時のことなどもあり、内部コマンドであることが多い
  • echoのリダイレクトを利用
  • 標準出力から > でファイルに上書きとなり >> でファイルに追記
  • まさに最終手段
$ echo "This is No.1 line." > test.txt    // 指定したファイル名の中身は、ゼロからの新規作成になる事に注意
$ echo "This is No.2 Line." >> file.txt   // 最終行の次に行を追加

その他の手段

  • sedなど他にも方法あり
  • 上の4つしかやった事が無いため記載は削除

Viewing all articles
Browse latest Browse all 5657

Trending Articles



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