• 締切済み

sedコマンドによる最終行の削除について

sedコマンドを使用してファイルの最終行を削除する方法を調べていたのですが 最終行の削除は問題なくできたのですが最終行から特定行までを消すため以下のコマンドを発行したのですがうまくいきませんでした。複数サイトを見てみたんですが構文自体は同じでしたのでおそらく問題ないとは思うですが何か気づく方がいたらお教えください。 以下実行コマンド sed -e '$-3,$d' sed_test.txt

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

sedのマニュアルをいくつか検索してみましたが、 アドレスに「$-3」とすると「最終行の3つ前」になる、と明記しているものは見付けられませんでした。 どこかにそのような記述がありましたか?

barash
質問者

お礼

回答の程ありがとうございます。 すみません。自己解決できました。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

これは sed では無理. 「構文自体は同じでしたので」って書いてますけど, 本当に「同じ」ですか? アドレスの与え方も含めて, きちんと確認しましたか?

barash
質問者

お礼

回答の程ありがとうございます。 すみません。自己解決できました。 ありがとうございました。

関連するQ&A

  • sedコマンドで指定の行まで削除

    sedコマンドで1行目から、例えば「FLAG」と書かれた行までを削除したい場合どう書けばよろしいでしょうか。 sedコマンド以外に有用なコマンドがあれば、そちらも教えていただきたいです。 よろしくお願いします。

  • sedコマンドに関して

    サーバーにあるファイルの中身を置換する為 Tera Termのsedコマンドを使おうとしたのですが 文字列の「'」が置換できません。 以下のように入力してみましたがだめでした。 sed -e 's/'/'aa/g' text1.txt > text2.txt sed -e 's/\'/\'aa/g' text1.txt > text2.txt 出来ないんでしょうか!? 宜しくお願いいたします。

  • sedコマンドの使い方 linux

    linux勉強中です。 やりたいことは以下です。 sample.txtというファイルには1行ごとにファイルパスが記載されています。 パスの中にhogeが複数含まれており、2番目のhoge以下のパスを取得したい。 (例)sample.txt home/user1/hoge/…/…/…/hoge/…/…/hoge/test.jsp home/user1/hoge/…/…/…/hoge/…/…/hoge/…/test2.jsp : の場合だと /hoge/…/…/hoge/test.jsp /hoge/…/…/hoge/…/test2.jspをアウトプットとして出したい。 以下の構文を書いたのですがこれだと最後のhoge以下のパスは取れるのですが真ん中のが取れず… grep 'hoge' sample.txt | sed s/'.*hoge'/'hoge'/g > output.txt sedで出来るのかなと思っているのですが、もっといいやり方などあればご教授ください。 よろしくお願いします

  • 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

  • perlで特定行から特定行までを抜き出しor置換

    perlで以下のようなことをしたいと考えています。 以下のことを、コマンドラインから「perl ~」という形で 実行したいのですが、どのよにすればよいでしょうか。 1.特定行から特定行までを抜き出し 2.特定行から特定行の範囲で文字列置換 例えば、次のようなテキストファイルがあったとします。 example.txt ================================== #START aaaa hogehoge test okok perl script #END ================================== 上記ファイルを読み込んで、 1.「#START」から「#END」の間に挟まれた行だけ抜き出し 2.「#START」から「#END」の間で、「test」を置換 のです。 sedで言うところの sed -e '/#START/,/#END/ s/YYYYMM/201603/g' test.txt をやりたいのです。

    • ベストアンサー
    • Perl
  • aliasを利用したsedコマンド

    以下の環境において、 $ echo `testalias` 192.168.0.3 $ more test.txt Host 192.168.0.2 Hostname 192.168.0.2 IdentitiesOnly yes Host 192.168.0.3 Hostname 192.168.0.3 IdentitiesOnly yes Host 192.168.0.4 Hostname 192.168.0.4 IdentitiesOnly yes sedコマンドで必要な部分の抜き取りを実行したいのですが、 aliasを使わずに、通常の文字列での抜き出しは問題なく動作するのですが、 $ sed -n '/192.168.0.3/,/IdentitiesOnly/p' test.txt Host 192.168.0.3 Hostname 192.168.0.3 IdentitiesOnly yes $ sed -n '/`testalias`/,/IdentitiesOnly/p' test.txt aliasを呼び出すとうまく動作しないのですが、alias使って同様の結果を出力する方法はないでしょうか。

  • 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)

  • DOSコマンドによるテキストファイル編集について

    下記「test1.txt」のようなファイルがあります。 先頭から指定桁目に特定文字を挿入し、末尾から指定桁分を削除する。それを行単位に行い、最終行まで繰り返す。 といったコマンド(構文)についてご教授頂けないでしょうか? 例: 先頭から4桁目に特定文字(XXX)を挿入 末尾から3桁分の文字を削除 <test1.txt> aaabbbcccddd eeefffggghhh ・・・ <実行結果:test1.txt> aaaXXXbbbccc eeeXXXfffggg 宜しくお願いします。

  • sedで特定文字が出たら次の行は読み飛ばす

    Linuxのsedコマンドなのですが、特定文字列が出たら読み飛ばすという事をやっています。 例えば、'#SKIP'が出たら次の行(複数行)は読み飛ばすみたいな事をです。 行飛ばしで2点質問がありますのでお願いします。 以下の様なファイルがあります。 /---------- $ cat input.txt YYYY YYYY YYYY YYYY YYYY #SKIP YYYY YYYY YYYY YYYY YYYY -----------/ '#SKIP'が出たら次の行を読み飛ばすは、 $ sed '/#SKIP/{N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 YYYY YYYY YYYY YYYY と、'#SKIP'の下の行が置換されます。 数行読み飛ばす場合は $ sed '/#SKIP/{N;N;N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 2016 2016 YYYY YYYY と、'#SKIP'から下の3行が置換されます。 てっきり、'#SKIP'から指定した(N;)行分読み飛ばし、それ以降を置換すると 思っていたのですが違うのでしょうか。 使い方が間違っているのでしょうか。 また、同じ様な行飛ばしで、範囲指定した場合ですが、 $ sed -e '3,20n;n;n; s/YYYY/2016/g' input.txt や $ sed -e '3,20{n;n;n; s/YYYY/2016/g}' input.txt とした場合、範囲指定外の3~20以外でも置換されます。 3行目から置換されたり、20行目を越えても置換されます。 OS、バージョンによるものでしょか。 本記載の2点について教えて下さい。

  • SEDの使い方

    こんにちは。 sedである複数行のパターンにマッチしたら置き換えるということをしたいのですが上手くいきません。 たとえば、 test.txt aaa bbb ccc に対して、 sed -i.bak s/aaa/aaa'\n'111/g test とすると、 test.txt aaa 111 bbb ccc となります。 これを戻す方法として、 sed -i.bak s/aaa'\n'111/aaa/g test としても、元に戻りません。 sedを用いで元に戻す方法をご教示いただけないでしょうか。 よろしくお願い致します。