• ベストアンサー

行頭と行末に文字追加

文字変換がうまくいきません。 sedとawkもしくはperlを使ってなんとかならないでしょうか? 行の行頭と行末を " で囲みたいのですが。 ------test.txt----- abc cde fgh hijk lm nopq rstu vwx y z ------test.txt---- 以下のように。 "abc cde fgh" "hijk lm" "nopq rstu vwx y z" よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

例えばこんな感じ: sed -e 's/^/"/;s/$/"/' test.txt awk '{$0="?"" $0 "?"";print}' test.txt perl -pe 's/^/"/;s/$/"/;' test.txt シングルクォートによるコマンド引数指定ができない場合は別途エスケープする必要があります。

dars12
質問者

お礼

ありがとうございます。 問題なくできました。 perl環境がなかったので、sedでやってみました。 こういうの使えると、仕事が楽ですよね。 もっと勉強します。 ありがとうございました。

関連するQ&A

  • sed、awk、または perl:行末判定

    htmlファイルの整形を考えています。 行末が必ず">"で終るように整形したいと思っています。 具体的にやりたいことは、awk または sed で、 ">"で終っていない行は次の行と連結し、それが">"で終ればその段階で出力、 それでも">"で終らなければまたその次の行を連結し... という作業をしたいのですが、その様なことができるでしょうか? 1行ごとに対する処理にはある程度なれているのですが、行に渡る作業には不馴れです。 良い方法がありましたら、ご教授頂けると幸です。 また、私はperlを知らないのですが、 もし「perlならこう書けば言い」ということが分る方がおりましたら、 その場合もご教授いただけたら嬉しく思います。 よろしくお願いします。

  • perlのバージョンによる動作の違い

    perl5.6.0と5.6.1で挙動が違って困っちゃってます。 $a = "abc[test]de[test]fgh[test]ij"; @b = ($a =~ /(.*?)\[test\]/sg); print join("|", @b); exit; LINUXでperl5.6.0だと abc|de|fgh LINUXでperl5.6.1だと abc どっちがバグでしょうか? #取り敢えずプログラム自体はsplitで代用して動かしました

  • sedの置換文字に変数を使用したいのですが・・・

    あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。 例: X="a" Y="b" echo test.txt | sed 's/${X}/${Y/g}' >test.txt sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

  • 複数パターンのsed文についての質問です。

    sedの使い方がよく分からない為、教えてください。 テキストの中で、同じパターンスペースに対して、 別の文字を置換させたいと考えています。 (一つ目のマッチングには、yyy 二つ目には、zzzなど) sed文ではコマンドブロックの書き方がわからないので、 sedスクリプトを別に用意してファイルを読み込ませた所、 うまくいきました。 sed -f test.sed test.txt しかし、第二段階として、置換文字列を変数にしたところ、 変数展開ができませんでした。実際には変数展開を考えているので、 困っているところです。 この問題を解決できるようなsed文(sed -e)か、sedスクリプトを 教えて頂きたく宜しくお願いいたします。 下記、テスト材料です。 一つ目のabcを $HOMEに、 二つ目のabcを $SHELLに置き換えたいです。 text.txt (編集元テキスト) ------------------ User yyyyy abc Pass zzzzz abc ------------------- test.sed(SEDスクリプト) --------------------- /User/{ N N s/abc/$HOME/ N N N s/abc/$SHELL/ } ----------------------

  • オープンしたファイルで行の連結

    はじめまして、言語に疎いもので質問させて頂きます。 次のようなsample.txtというファイルがあります。 【sample.txt】 ABC #1行目 <タブ>DEF #2行目 行頭にタブ <タブ>GHI #3行目 行頭にタブ JKL #4行目 <タブ>MNO #5行目 行頭にタブ PQR #6行目 <タブ>STU #7行目 行頭にタブ <タブ>VWX #8行目 行頭にタブ (・・・以下上記のような2、3行のブロックパターンがランダムで続く) 1~3行目を1ブロック、また4~5行目、6~8行目を一部ロックとして 半角スペースを間に挟んで一行に連結し、下のように別ファイルに出力したいと考えております。 【output.txt】 ABC DEF GHI JKL MNO PQR STU VWX ファイル自体は次のようにopen関数で開き、一行ずつ読み込んでいますが、現在の行を読みつつ、 次の行の内容をどうしたら読むことができるかわかりません。 また行の連結はどのように行えばよいでしょうか。 2、3行のブロックパターンがランダムで続くため、次の行の先頭にタブがあれば連結するという 処理も加えたいと考えております。 open(IN, $sample.txt); while (<IN>) {    $line = <IN>; } 質問内容もわかり辛いかと思いますがご教授頂けますでしょうか。

    • ベストアンサー
    • Perl
  • Perlでのテキスト処理について

    Perlでのテキスト処理について質問です。 テキストファイルの中身が下記のようになっています。 【テキスト編集前】 --------------------------------------- test ,abc ,AB ,VI ,SS ,ma ---1行目 test ,abc ,AC ,PI ,VS ,ma ---2行目 test ,abc ,BA ,SS ,VS ,ma ---3行目 test ,abc ,BA ,VI ,VS ,ma ---4行目 test ,cde ,AA ,VI ,SS ,mb ---5行目 test ,cde ,CC ,PE ,VS ,mb ---6行目 test ,cde ,BC ,PI ,SS ,mb ---7行目 test ,cde ,AC ,PI ,SS ,mc ---8行目 --------------------------------------- 2列目(abc/cde)と6列目(ma/mb/mc)が同じ行に対しては 1行にまとめて出力したいと思っています。 この時、1列目、4列目、5列目はマージした形にし (同一文字は一度だけ出力、同一でない文字は/区切りで出力)、 2列目、6列目は同一文字をそのまま出力し、 3列目に関しては、該当する行の先頭行の文字列を 出力したいと思っています。 下記が当方の希望しているPerl実行後の出力結果です。 【テキスト編集後】 --------------------------------------- test ,abc ,AB ,VI/PI/SS ,SS/VS ,ma test ,cde ,AA ,VI/PE/PI ,SS/VS ,mb test ,cde ,AC ,PI ,SS ,mc --------------------------------------- このような編集をPerlで実行したいと思っているのですが、 どのような記述をすれば実行できるのか教えて頂けないでしょうか。 当方、Perlを始めたばかりで基本的なことを 伺っているのかもしれませんが すみませんが、ご了承ください。 宜しくお願いいたします。

  • 文字単位の置換

    perlの $string=~tr/abc/xyz/; ($stringの中の"a"を"x","b"を"y""c"を"z"に置換) と同じことをphpでやりたいのですが、 できますでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • 「awk」で複数のファイルの特定行を変換する方法

    初心者です。 「awk」又は「perl」を使って a.txt、b.txt…z.txtの中の1行目10カラム目の値を 全て「a」という値に一括で変換する方法を教えて下さい。 よろしくお願いします。

  • test.htm の133048行目だけを削除したい

    10MBぐらいあるファイル(test.htm) の、133048行目を、単に削除したいのですが、perl script (del.pl等のファイル)で、どのように書くのでしょうか?  awkとかsed とかを昔使った経験がありますが、perlのことをはじめたばかりで、さっぱり解りません. またperl初心者に向く基礎的なことを記したURLがありますでしょうか? またperl以外で、こうすれば、良い、という別手法情報も今後の参考には、ありがたいです、よろしくお願いします.

    • ベストアンサー
    • CGI
  • UNIX:テキストファイルのNULLを空白に変換したい。

    お世話になります。 現在テキストファイルをOracleデータベースに取り込む処理を開発しております。SQL*Loaderを用いて、テスト.datを取り込もうとしたのですが、 ORA-01722: 数値が無効です。エラーが出てデータを取り込めません。 テスト.datの中身を見たところ、該当個所に下記のようにNULLが入っていました。 数値型のテーブル項目に、NULLを取り込もうとしてエラーになっています。 Oracleの場合、数値型では空白は取り込めるようですが、NULLは取り込めないようです。 ですので、テスト.datのNULLの個所を空白に変換する方法を調査しています。 sedや、awk、perlを使えばできるのでしょうが、私は詳しくないため 方法が思いつきません。 どなたか、sed、awk、perlに詳しい方がいれば、方向性のヒントだけでも お教えねがいますでしょうか。 環境: Solaris 9 ■テスト.dat od -c テスト.dat > テスト.txt ※ \t = タブ、\0= NULL $ head -10 テスト.txt 0000000 0 0 1 \t 0 1 0 1 \t 1 \t 0 1 0 1 \t 0000020 0 0 0 0 0 0 \t 0 3 7 \t 1 0 0 1 0 0000040 2 8 \t \0 \0 \0 \t \0 \0 \0 \0 \0 \0 \0 \0 \0 0000060 \0 \t \0 \t 0 0 \t 6 3 \t 0 0 \t 1 \t ■編集後のイメージ \0(NULL)の個所を、そのままスペース(空白)で置き換えたい。 0000000 0 0 1 \t 0 1 0 1 \t 1 \t 0 1 0 1 \t 0000020 0 0 0 0 0 0 \t 0 3 7 \t 1 0 0 1 0 0000040 2 8 \t   \t 0000060 \t \t 0 0 \t 6 3 \t 0 0 \t 1 \t よろしくお願いします。

専門家に質問してみよう