• 締切済み

bashでテキストファイルの編集について

bashでファイルの1行目の5バイト目にある文字だけを置換させたく sed、awkコマンドでいろいろやってみたのですが、 知識不足で全行の5バイト目が置換されたりして なかなかうまくいきません。 どなたかご回答お願いします。

みんなの回答

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

LC_* で「バイト単位になるようなロケール」を指定できれば . を並べるだけなんだけどねぇ>#2. そうそう, #1 を書いてから気付いたんだけど, どこが C&C++?

全文を見る
すると、全ての回答が全文表示されます。
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

ANo1さんが仰られているように「この行だけ」っていう指定がsedに(awkにも、似たようなものとしてNRが)あるので、 それを使えば実現可能だと思います。 <おまけ> ちなみに、「何バイト目」という要件の方をどのように解決されたか教えてもらっても良いでしょうか? 基本文字解釈かLC_CTYPE指定になるのかなと思ったんですが、 どちらにせよマルチバイト文字が置換箇所へ混じっているときには嫌らしい動作になる気がしました。 多分そういうファイルが今回の対象では無いと思うんですが・・・ # sed http://ideone.com/IwcyA # mawk http://ideone.com/utRm4 # gawk http://ideone.com/qyBfc うーん、どうするものなんだろ・・・

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

sed で「1行目だけ」って指定すればいいような気がする.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バッチファイルで文字列を順番問わずマッチさせたい

    バッチファイルで、2個以上の文字列を順番問わずマッチさせたいと考えています。 例えば、 「111 222 333 444 555 666 777」 という内容のテキストファイルがあったとして、 sedコマンドを使って 「222」と「444」と「666」が この順番で含まれている行を置換したい場合、 sed -e "s/.*222.*444.*666.*/置換後の文字列/" in.txt > out.txt とすれば、問題なく置換されると思います。 しかし、上記の例では、 「777 666 555 444 333 222 111」 という内容のテキストファイルは置換されません。 文字列の順番を問わず、 「222」と「444」と「666」が含まれている行ならば、 その行を置換する、といった事は出来ないでしょうか。 sedコマンド以外でも構いませんので、何かいい方法をご存知の方がおられましたらお教え頂けないでしょうか。

  • bashで文字列に含まれる//(スラッシュ2つ)を/(スラッシュ1つ)

    bashで文字列に含まれる//(スラッシュ2つ)を/(スラッシュ1つ)に置換したいです。 str=/dir1//dir2//dir3/ str=$${str//?/?} 上記の?の部分の記述がよく分かりません。 sedなど、外部コマンドは呼ばないで実現したいです。 よろしくお願いします。

  • テキストファイルの行抽出

    linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。

  • awkで単語単位での置換

    awkを使って単語単位の置換を行いたいのですが、うまく行きません。 awkで単語単位で置換を行うのにはどの様にすれば宜しいのでしょうか? 何方かご存知の方いらっしゃいましたらご教授願います。 具体的にはsedの以下のコマンドと同等の事をawkで行いたいと思っています。 sed 's/\b置換前の単語\b/置換後の単語/g' 例: ・ファイルの内容 hogehoge abcdefg hogehoge hogehoge bcdef hogehoge hogehoge bcd hogehoge hogehoge abcd hogehoge hogehoge bcd hogehoge bcdef bcd hogehoge 上記ファイルをawkで1行ずつ読み込みの3,5,7行目の”bcd”のみ”HIJ”に置き換える事をしたいと考えています。 下記を試してみたのですが、うまく行きませんでした。 1.awk '{gsub(/\bbcd\b/, "HIJ", $0); print $0}' 2.awk '{gsub(/(bcd)/, "HIJ", $0); print $0}' 1だと全く置換されず、2だと3,5,7行目以外も置換されてしまいます。 どの様にしたらうまく行くのでしょうか?

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • シェルスクリプト(bash)によるファイルの編集

    シェルスクリプト(bash)によるファイルの編集についてのご相談です。 私にあまりスクリプトの知識がないので申し訳ございませんが、 どなたかお知恵を拝借させてください。 よろしくお願いします。 【条件】 ・以下のような文字列を含むファイルが複数あるとします。 ・そして、その文字列は、ファイル内の不特定の行に存在します。 ※[半角スペース]、[タブ]は実際には便宜上記載していますが、実際は 本当の半角スペース、タブが入ります。 AAA[半角スペース]BBB AAA[半角スペース]CCC AAA[タブ]BBB AAA[タブ]CCC 【やりたいこと】 このとき、 AAA[半角スペース]BBB および AAA[タブ]BBB の行の下に、それぞれ、 AAA[半角スペース]DDD  と   AAA[タブ]DDD を挿入したいのですが、これをスクリプト(コマンド)でどのように行えば よいのかわからずに困っています。

  • テキストファイルをwhileでブロック毎に処理がしたいのです。

    テキストファイルをwhileでブロック毎に処理がしたいのです。 シェルスクリプトにてlinuxコマンドを使用し行いたい処理で御座います。 例 func(){ #ブロックでの処理 awk ~~~~~~ } while do sed -n -e 'スタート行,/^特定文字/p' source.txt func() done 特定文字は必ず出現し、ブロック処理を行った後特定文字の次の行がスタート行となりループを させたいのですが、どうしてもやり方が解らずめげています。 御手数お掛け致しますがどなたか教えて頂けると幸いです。

  • 【コマンドプロンプト】テキストファイル内の文字列置換

    こんにちは。 コマンドプロンプトのバッチファイルでテキストファイル内の文字列の置換を行いたいと考えております。 例えば以下のような内容があった場合、 --開始-- ABCDEFG1111 ABCDEFG ABCDEFG1111 HIJKLMN --終了-- バッチファイル処理結果として 1111 ABCDEFG 1111 HIJKLMN という結果を別ファイルに出力したいのです。 制限としては、sed,awkなどのwindows上で稼動するツールがあるようですが それらは使用できません。 どなたかご存知の方教えていただけないでしょうか よろしくお願い致します。

  • sedコマンドを使用して、文字の置換を行いのですが助けてください。

    sedコマンドを使用して、文字の置換を行いのですが助けてください。 sedコマンドやawkコマンドなどを使って、aliasesファイルの置換を行いたいのですが、 うまくいかないので教えていただけないでしょうか? 知りたいのは、次のような置換を一括で行うことのできるコマンドです。 ■置換前のファイル ================= AAAA:  :include:/file/name BBBB:  :include:/file/name CCCC:  :include:/file/name ================= ■置換後のファイル(希望する置換結果) ※1フィールド目の任意の文字列をメールアドレスのローカルパートとして利用したい ================= AAAA:  AAAA@example.com BBBB:  BBBB@example.com CCCC:  CCCC@example.com ================= 以上です。

  • バッチファイルでテキストファイルを分割したい

    テキストファイルを、指定した数値の倍数の行を、指定した個数に分割するバッチファイルを作成しようとしています。 例えば、以下の様な内容の「in.txt」というテキストファイルを3分割したい場合、 ----- in.txtの内容 ----- 1 2 3 4 5 6 7 8 9 10 ------------------------ 以下の様な内容で、 「out1.txt」「out2.txt」「out3.txt」として出力したいのです。 ----- out1.txtの内容 ----- 1 4 7 10 -------------------------- ----- out2.txtの内容 ----- 2 5 8 -------------------------- ----- out3.txtの内容 ----- 3 6 9 -------------------------- 自分はプログラミングの知識がないので、WEBに書かれている構文を少し書き換えたりして試しているのですが、うまく行きません。 AWKを使い、以下のようなバッチファイルを作成して実行してみましたが、「out3.txt」だけがうまく行きませんでした。構文の意味も分からないので修正も出来ません。 awk "NR%%3==1" "in.txt" > "out1.txt" awk "NR%%3==2" "in.txt" > "out2.txt" awk "NR%%3==3" "in.txt" > "out3.txt" AWKの解説ページを読み始めたのですが、時間的な猶予があまり無く、今回質問させて頂いた処理が出来るようになるまでまだ時間が掛かりそうなので、どなたかお分かりの方がおられましたお教え頂けないでしょうか。 AWKでなくとも、sedでもPerlでもその他のコマンドでも構いませんし、スクリプトファイルを読み込めるコマンドでしたらスクリプトでの書き方でも結構ですので、ご存知の方がおられましたらお教え頂けないでしょうか。