• ベストアンサー

viエディタを使って楽に打ち込みたいとき

単純な文字列を多く作ろうと思ったのですが、その為のコマンドがわかりません。 たとえば、vi-エディタでファイル内に1~10000の数を縦に並べてみようかと思ったのですが、これはひたすらENTERを押して行番号をつけるコマンドを入れるしかないのでしょうか?そもそも第一に、行番号をつけるコマンドで出来た数字はデータとして残るのでしょうか? また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか? また、上記の様な事をさせるときにはviを使う以外に何か方法はあるのでしょうか?e-macsを使ってC言語?でシェルスプリクト??を上手く使えばできる、と言われたのですが、それをするとひたすら1~10000個のファイルがカレントディレクトリに生成されてしまいました。 Linux、始めたばかりでよくわからないのですが(一応基本コマンド程度はマスターしましたが)よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#136147
noname#136147
回答No.2

> 1~10000の数を縦に並べてみようかと思ったのですが 考え方は人それぞれでいろいろなやり方があると思いますが、 思いついたものを書いておきます。 ・vi 空行を作成し、その行をddで削除した後、 10000p (数字分貼り付けを繰り返す)コマンドを実行すると、 10000行分の空行が出来ます。 それを例えば、test.txtという名前で保存した後に コマンドで、cat -n test.txt > test2.txt とすると、1~10000までの番号がついたファイルがtest2.txtとして出来ます。 ・emacs Esc 10000 Enter とバッファ上で入力した後に、保存すると10000行の空行ができるので、 保存してviの時と同じようにcat -nコマンドを実行する。 ・シェルスクリプト ==== test.sh =============== #!/bin/sh cnt=0 while [ $cnt -ne 10000 ]; do echo $cnt cnt=`expr $cnt + 1` done > test.txt ============================ を実行すると、test.txtというファイルが出来ます。 > また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか? 一つ一つのコマンドの動作は簡単なものですが、 組み合わせることでいろいろなことができるようになります。 発想次第ですね。 単純にスクリプトを書くと、 ===== test2.sh ================= #!/bin/sh WORD="a b c d e" echo $WORD cnt=1 cnt2=0 while [ $cnt -lt 10 ] do for f in $WORD do while [ $cnt2 -lt $cnt ] do echo -n $f cnt2=`expr $cnt2 + 1` done cnt2=0 echo -n " " done cnt=`expr $cnt + 1` echo done =================================================== sedやawkを使う人も多いでしょうし、perlなんかでも簡単にできそうです。

black-ed
質問者

お礼

ありがとうございました。 無事にファイルが作成できました。 詳しい説明、わかり易い解説をありがとうございました。 また何かあったときには、是非よろしくお願いします。

その他の回答 (3)

回答No.4

> また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか? コマンドラインから  perl -le "$i=q(a); print $i++ until $i gt q(zz)" でその間の文字列を生成できます。 aとzzを変えて使ってください。

black-ed
質問者

お礼

"このバージョンではできません、ごめんなさい"と出力されました... なんだったのでしょうか...???

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

・set nu で付けた行番号は表示だけで、ファイル自体には付加されません。 ・1~10000 だとseqコマンドと組み合わせて、 :r !seq 10000 (seq コマンドの応用としては、seq 101 200 とか seq 0 2 10 とか) ・a b ・・・ aa ab ・・・ aaa aab 直接にこういうシーケンスを出力するコマンドはないので、何らかのプログラム、スクリプトを書くしかないですね。

black-ed
質問者

お礼

回答ありがとうございました。 参考になりました。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

即興で作ってみました。 以下のスクリプトを test.pl として保存し、 perl test.pl 保存先ファイル名 で実行してみてください。 perl はたいていの環境で動作するはずです。 --- use strict; my ($ct); if( @ARGV < 1 ){ print "ファイル名を指定してください。\n"; exit; } print "savefile = " . $ARGV[0] . "\n"; open(FILE, ">" . $ARGV[0]) or die "Can't Save"; for( $ct=1; $ct<=10000; $ct++){ print FILE $ct . "\n"; } close(FILE); --- >数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか? 聞いたことが無いです。 ただ、このような命題は、どんなプログラムの本でも最初のほうに出てくるのでは?

black-ed
質問者

お礼

早速の解答、ありがとうございました。参考になりました。

関連するQ&A

  • viエディタのコマンド

     FreeBSDでapacheのhttpd.confを編集するのにviエディタをつかっているのですがhttpd.confがとても長く編集しずらく感じます。ときどき350行目のここがおかしいと教えていただくのですがviエディタでここが何行目かわかるコマンドがあるのでしょうか?また何行目に飛ぶためのコマンドはあるのでしょうか?今は文字列の検索/でその行までとんでいます。  よろしくおねがいします。

  • [vi]エディタ;ファイルを開く・閉じるコマンドとは?

    質問させていただきます。[vi]エディタで、新規にファイルを開くコマンドを教えてください。[vi]を起動させるとき[vi]にファイル名を書いて起動させれば新しくファイルが作れますが、[vi]に何か書いているとき新しいファイルを開くにはどのようにすればよいのでしょうか。[:e]らしいのですが、今書いている[vi]の画面のまま、それまで書いていたものが消えて「新規のファイル」が開くというコマンドは無いのでしょうか。  それと、[vi]を終了させずに[vi]の画面を閉じるというようなコマンドはありますか。初心者なので本で調べたのですが見つかりませんでした。[vi]を終了させれば閉じることはできますが、[vi]を終了させずに[vi]を閉じるなどという芸当はできるものなのでしょうか。ご存知でしたら教えてください。よろしくお願いいたします。

  • viで行の検索をしたいのですが?

    http://itpro.nikkeibp.co.jp/members/LIN/LIN_CONTENTS/20020531/1/vi.shtmlから vi [-Rbnr] [+[line]] file という構文が示されていますが、いまいちうまく出来ません。(指定の仕方がまちがっているかもしれませんが) sshでPuttyを使って、RedHat9(Publisher's Edition) を操作しています。 cのプログラミングをはじめたばかりですが、( gccのコマンドも使い切ってないのですが、) エラーの場合に出てくる行番号が エディタ上にはでてこないので、これを検索する方法を探していました。man でも探しましたが、分かりませんでした。cのプログラミングのエディタのもっと良い方法があれば更に知りたいのですが。(cpuが遅いので、sshで操作しています。)基本的にはviでの行の検索方法です。よろしく、お願いします。

  • viの設定ファイルについて

    viとvim、設定ファイルについてお聞きします。 FedoraCore6を利用していますが、設定ファイルの.exrcと.vimrcなのですが、これはviを起動した際はどちらの設定が反映されるのでしょうか。 viで行番号を表示させたかったので.exrcに「set number」を記入しましたが、反映されませんでした。 あとから気づいたのですが、すでに「set nu」(numberの短略版)と記述されてたのでどちらにしても行番号が反映されていないようでした。でも、同じファイルに「syntax on」は記述があり、viを起動するときちんと色が付いて表示されます。 しかたなく、.vimrcに「set number」を記入したところ、viでファイルを開いたらきちんと行番号まで表示されました。 .vimrcには「set number」しか記入してないのに、色もきちんと反映されます。しかもviを起動したのであって、vimを起動したのではないのに行番号も反映されます。 viとvim、.vimrcと.exrcそれぞれの仕組みをご教示いただけますでしょうか。

  • viで一括で行をつなげたい

    viエディタで、 :%s/???/???/g とかで、行を繋げることはできないでしょうか。 行の最後がある特定の文字列がきた場合には、 (もしくは全ての行の) 行と行をつなげる(改行をなくす)という意味です。 viで「Shift+J」で1行単位でできるのは知ってるのですが 一括置換したいです。 もし、viでなくても他のテキストエディタ等で方法があれば 教えてください。

  • viでのコメント文字入力

    vi初心者です。多数のサーバを管理しているため、viに慣れるようにがんばっています。 スクリプトファイルや設定ファイルをいじる際、「#」などのコメントアウト文字を行頭に入れる場面がよくあります。 viに詳しくないため、   ・コマンドモードで該当行に移動   ・入力モードに移って、#を入力   ・コマンドモードに戻って次の行へ移動   ・入力モードに移って、#を入力 を繰り返しています。 お尋ねしたいのは、   連続した数行の行頭にコメントアウト文字を効率よく   入力する方法 です。上手い方法があるのでしょうか? いろいろなサイトを見てみたのですが、分かりませんでした。今のやり方だと、一行ごとにモードを切り替えているため、効率が悪いように思うのです。 詳しい方のご回答をいただけると幸いです。よろしくお願いいたします!

  • viの操作を自動化(または同様のこと)したい

    よくhttpd.confの設定ファイルを編集するのですが、どのような編集をしたか 残すために設定ファイル中にコメントを残すのですが、別の方法としてviの操作を スクリプトに記述しておいて、それを実行するだけ、みたいなことをしたいと 考えています。ちょっとやってみたのですが、コマンドモードや編集モードだと うまく行くのですが、挿入モードになるとESCできなくなってその後の処理が 出来ません。何か良い方法は無いでしょうか? ちなみにemacs・mule等は使用しない方針です。 ---------------------------------------------------- vi /etc/httpd/conf/httpd.conf.bak /Config Y 5- P I   ・・・この辺までは問題なし     ・・・ここでESCできないので次のZZが保存コマンドとして動かない ZZ

  • エクセルの行列番号

    エクセルの行番号・列番号の変更について教えてください。 通常だと行番号は「1・2・3…」列番号は「A・B・C…」と 縦に数字が並び横にアルファベットが並んでいると思います。 どこをどう触ったのかわからないのですが、入れ替わってしまいました。 縦にアルファベットが並び、横に数字が並んでしまっています。 また、別の人間も同じような現象を起こしてしまい、 縦も横も数字が表示されてしまっています。 これはどこをどうすれば直るのでしょうか? よろしくお願いいたします。

  • viコマンドについて

    OS:solaris10(SPARC版) 質問: あるテキストファイルをviコマンドで開いてある文字だけを削除したい場合どのようにしたらいいのですか?ご教授をお願いします。 例えば: /mnt/export/home/a/b/c /mnt/export/home/d/e/f /mnt/export/home/g/h/i /mnt/export/home/j/k/l 上記4つのなかで/mnt/export/home/だけを削除したいです。

  • 行削除のVIコマンド

    viコマンドでご教授いただきたい事があります 「先頭が"hoge"から始まる行以外を全て削除する」 を実現する ”: ” から始まるコマンド文はありませんでしょうか? いろいろ組み合わせたら出来そうな気がするのですが、 私の思考能力では限界です。 どうぞよろしくお願いいたします。