- 締切済み
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 よろしくお願いします
- みんなの回答 (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 例によって、イコールをスペースに読み替えてください。
環境依存になるけど、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}」に変更 コマンドの説明が必要ならリクエストください。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>空白を何回繰り返す >といった、記号はありませんでしょうか? であれば、awkを使った方が早いと思う。 例えば、以下のように。 http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_096 後は「処理している行が3行目だったら作った文字列を1行追加出力する」だけ。
- trapezium
- ベストアンサー率62% (276/442)
"3i\" で開始すればいいです。 sed -e "3i\<space><space><space>aaa" /tmp/abc.cnf GNU sed 以外では 3i\ \<space><space><space>aaa とすべきですが。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
sed -e ”3i\ \ \ aaa” /tmp/abc.cnf
補足
ありがとうございます。 空白の数を3としていましたが、 空白の数が20の場合などあるため、 空白を何回繰り返す といった、記号はありませんでしょうか? ある場合、コマンドラインを教えて下さい。