• 締切済み

sedコマンド 先頭に空白文字を含む行の挿入

よろしくお願いします。 [やりたい事] linaxサーバで、行の先頭に空白を3個含む文字列aaaを、/tmp/abc.cnfの3行目に挿入したいですが下記[実施コマンド]ではうまくいかず、上手くいくコマンドラインを教えて下さい。 [実施コマンド] sed -e ”3i <space><space><space>aaa” /tmp/abc.cnf [/tmp/abc.cnf]の中身 △△△123 △△△456 △△△aaa ←コマンドで挿入したい △△△666 △△△777 よろしくお願いします

みんなの回答

noname#223623
noname#223623
回答No.5

#4 です。質問文と補足を読み直して考えなおした。スペースの数が変わる理由が不明なので推測だけど、要するに行頭を揃えたいだけなのかな? もし以下の条件だったら別の方法でやったほうが簡単かも。 * 質問文にある△はスペースである * 行頭スペースの数は決まっていないが、各行で異なることはない * 3 行目の行頭に入れるスペースの数は、2 行目と同じにすればよい だとすると以下のコマンドでいける。  $ cat sample.txt  ===1111  ===2222  ===3333  ===4444  $ sed -e '2s/^\(=*\)\([^=].*\)/\1\2\n\1aaa/' sample.txt  ===1111  ===2222  ===aaa  ===3333  ===4444 例によって、イコールをスペースに読み替えてください。

noname#223623
noname#223623
回答No.4

環境依存になるけど、bash ならこんな感じ。  $ cat sample.txt  1111  2222  3333  4444  $ sed -e "3i `printf '%0.s\=' {1..3}`aaa" sample.txt  1111  2222  ===aaa  3333  4444 【変更するところ】 * 「printf '%0.s\=」のイコールは結果を確認しやすくしただけ。実際はスペースに変更 * スペースが 20 個なら 「{1..3}」を「{1..20}」に変更 コマンドの説明が必要ならリクエストください。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.3

>空白を何回繰り返す >といった、記号はありませんでしょうか? であれば、awkを使った方が早いと思う。 例えば、以下のように。 http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096 後は「処理している行が3行目だったら作った文字列を1行追加出力する」だけ。

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

"3i\" で開始すればいいです。 sed -e "3i\<space><space><space>aaa" /tmp/abc.cnf GNU sed 以外では 3i\ \<space><space><space>aaa とすべきですが。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.1

sed -e ”3i\ \ \ aaa” /tmp/abc.cnf

asahi5823
質問者

補足

ありがとうございます。 空白の数を3としていましたが、 空白の数が20の場合などあるため、 空白を何回繰り返す といった、記号はありませんでしょうか? ある場合、コマンドラインを教えて下さい。

関連するQ&A

  • 先頭から8文字目に1文字挿入したい

    シェルスクリプトで文章の整形をしています。 行の先頭から8文字目にスペースを挿入する方法を教えてください。 ウェブで検索したところsedコマンドでできるようですが、 シェルは初心者でなかなか読み解くことができず おもったようにできませんでした。 シェルはbashです。 よろしくお願いいたします。

  • unix sedコマンドについて

    file --------------------------------------- abcdefghijklmnopqrstu abcdefghijklmnopqrstu person=aaa wake walk work abcdefghijklmnopqrstu abcdefghijklmnopqrstu --------------------------------- といったファイルにて このファイルからperson~空白行を「sedコマンド」で削除したいのですがどのようにしたらよいでしょうか。 sedコマンドを使用すると、どうやら、数行あるテキストを一行にまとめ、空白行を見つけたらその行を削除するといった動きになるようです。(一行でそれを行うのでしょうか。。) どなたか、わかる方いたら教えていただけないでしょうか。 よろしくお願いします。

  • Linux sedコマンド 特定行の置換

    こんにちは テキストファイルの内容をsedコマンドで特定の行の頭に#を付けるようにしたいのですが、 うまくいきません。どのようにしたら良いでしょうか。 --実行前の内容-- * * * * * /tmp/tst.sh * * * * * /opt/aaa.sh --想定結果-- #* * * * * /tmp/tst.sh * * * * * /opt/aaa.sh

  • 【sed】変数に設定したコマンドの実行について

    お世話になります。 一度変数に文字列として格納したsedコマンドの実行についての質問です。 以下、「実装1」のように、「あるファイルの最終行を除外して別のファイルに書き込む」という処理を行おうとしています。 ログ出力などの関係で、実行するコマンドを一度変数に格納する必要があるのですが 一度変数に格納して実行すると「実装2」のようにエラーが出てしまいます。 変数に格納したsedコマンドを実行するにはどのようにすればいいでしょうか? なお、シェルはbashです。 実行例ではターミナルから直接実行していますが、実際にはシェルスクリプトにして実行します。 以上、どなたかご教示頂けないでしょうか。 ■実装1 [root@localhost tmp]# cat /tmp/data aaa bbb ccc [root@localhost tmp]# sed -e '$d' /tmp/data >/tmp/data2 [root@localhost tmp]# cat /tmp/data2 aaa bbb [root@localhost tmp]# ■実装2 [root@localhost tmp]# CMD='sed -e $d /tmp/data >/tmp/data2' [root@localhost tmp]# echo $CMD sed -e $d /tmp/data >/tmp/data2 [root@localhost tmp]# $CMD aaa bbb sed: >/tmp/data2を読み込めません: そのようなファイルやディレクトリはありません [root@localhost tmp]#

  • sed コマンド

    sedを使って、行の中の単語を修正しようとしています。うまくいきません。サジェスチョンをお願いできますか? やりたいこと:  (tab) xxxxx01 (tab) --->(tab) xxxxx01_aaa (tab) (tab) xxxxx02 (tab) --->(tab) xxxxx02_aaa (tab) (tab) xxxxx03 (tab) --->(tab) xxxxx03_aaa (tab) sed -e 's/ xxxxx0(\d) / xxxxx0\1_aaa /' file.txt > file2.txt エラーメッセージは、\1の参照が適当ではない、と言うものです。 宜しくお願い致します。

  • sed 1行スクリプト

    以下は、"PATTERN" にマッチする行の直前の行に、文字列"STRING"を挿入する sed スクリプトで、sed -f で期待どおりの動作をします。 ---------- /PATTERN/ i\ STRING ---------- ここで、PATTERN及びSTRINGは空白文字を含みます。 これを、sed の -e オプションを使って、1行コマンドで実行したいのですが、どうにもこうにもうまくいきません。 sedの基本が身についていないだけなのですが、お知恵を拝借できないでしょうか? 実行環境は次のとおりです。 GNU bash, version 2.04.0(1)-release (i686-pc-msys)

  • sedを使って複数ファイルの先頭行を表示

    以下の様なファイルがあります。 各ファイルの先頭行をとりだしたいのですが、headコマンドを使うと ファイル名と結果が分かれて表示されます。 sedで、-nオプションの行番号指定で表示することができるので、 sed -n '1p' *.txt のワイルドカード指定でやったのですが、 この場合だと複数ファイルとみてくれなくて、すべてのファイルを ひとつにしてその先頭を表示しているみたいです。 できれば、各ファイル毎に、ファイル名と結果を1行にして表示したい のですが、どうすればよいでしょうか。 参照ファイル cat 1.txt 12345 67890 cat 2.txt abcde fghij cat 3.txt 11111 22222 headコマンドで実行 $ head -n 1 *.txt ==> 1.txt <== 12345 ==> 2.txt <== abcde ==> 3.txt <== 11111 sedで実行 $ sed -n '1p' *.txt 12345

  • エクセル2000で空白行挿入のコマンドを出したい

    エクセル2000と2007(パソコン2台)を使用しております。 どちらでも構いませんので、 下記の事をしたいのです。 ↓ http://www.freeformat.co.jp/FFFunc130.htm でも空白行挿入というコマンドが どうしてもありません。 どうすれば使えるようになりますか? 宜しくお願いします。

  • コンボボックスの先頭行に空白行を入れるには?

    ACCESS2000です。フォームに貼り付けたコンボボックスのプロパティの値集合ソースにクエリを書いて、クエリ実行結果のデータを取得して、コンボボックスの内容としているのですが、先頭行に空白行を挿入して、2行目以降にクエリ実行結果のデータを入れたいのです。どうすればよいのでしょうか?ちなみに列数は4列です。 それから、その空白行に「(指定なし)」のような表示が可能であれば合わせて教えてください。

  • viで行にスペース(空白)を挿入する操作

    viで行にスペース(空白)を挿入する操作を教えてください。