テキスト

<title> 名前X </title>

のような内容の、テキストファイルが1000件ほどあります。
これを、ソフト または Linuxコマンド(SSH接続)等で

テキスト
<title> 名前X </title>

↓置換

テキスト
<title> 名前X </title>
<b> 名前X </b>( N番目 )


全ファイルを一括置換したいと思っています。
名前Xはファイル毎に違います。
N番目については、Nがカウントされて、全てのファイルを違う数字にしたいです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/10/02 01:12:21
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ita No.1

回答回数204ベストアンサー獲得回数48

ポイント50pt

こんなんどうでしょう

元ファイルはEUCとしてます。

#! /bin/csh

set count = 1

#変換後のファイル置場
mkdir tmp

#拡張子はてきとうに
foreach x(*.html *.htm)
    nkf -e  $x |\
    sed "s/<title>\(.*\)<\/title>/<title>\1<\/title>\n<b>\1<\/b>($count番目)/" |\
    sed "s/<TITLE>\(.*\)<\/TITLE>/<title>\1<\/title>\n<b>\1<\/b>($count番目)/" \
  > tmp/$x

  @ count ++
end
id:seasons

とても、わかりやすいソース。有り難うございます!

さっそく、実行してみたいと思います。

今後も宜しくお願い致します。

2007/10/01 18:23:19

その他の回答1件)

id:ita No.1

回答回数204ベストアンサー獲得回数48ここでベストアンサー

ポイント50pt

こんなんどうでしょう

元ファイルはEUCとしてます。

#! /bin/csh

set count = 1

#変換後のファイル置場
mkdir tmp

#拡張子はてきとうに
foreach x(*.html *.htm)
    nkf -e  $x |\
    sed "s/<title>\(.*\)<\/title>/<title>\1<\/title>\n<b>\1<\/b>($count番目)/" |\
    sed "s/<TITLE>\(.*\)<\/TITLE>/<title>\1<\/title>\n<b>\1<\/b>($count番目)/" \
  > tmp/$x

  @ count ++
end
id:seasons

とても、わかりやすいソース。有り難うございます!

さっそく、実行してみたいと思います。

今後も宜しくお願い致します。

2007/10/01 18:23:19
id:smeghead No.2

回答回数11ベストアンサー獲得回数0

ポイント50pt

perlとawkを使った方法です。

conv.awkというファイルを、対象のテキストファイルがあるディレクトリに配置する。

conv.awk

BEGIN {
    n = 1
}
{
    filename = $1
    if (filename != "conv.awk") {
        command = "perl -n -i.backup -e 's/(<title>([^<]+)<\\/title>)/\\1\\n<b>\\2<\\/b>(" n++ "番目)/; print' "  filename
        system(command)
    }
}

以下のコマンドを実行する。

$ /bin/ls | awk -f conv.awk

で目的の動作でしょうか?

.backupで元のファイルのバックアップを作成するはずですが、一応元ファイルはバックアップしといた方がいいです。

id:seasons

有り難うございます!

このような方法もあるのですねー

勉強になりました・・・

勉強のためにも 回答者様、お二人の方法、両方で試してみます。

今後も宜しくお願い致します。

2007/10/01 18:24:24

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません