
私がやりたいことは、
<title>
1 行目、3 行目、5 行目などの先頭に追加します(Notepad++ ファイルでは数百行)</title>
1 行目、3 行目、5 行目などの末尾に追加します。
それから:
- 偶数行の先頭に追加します
<link>
(例: 行 2、4、6、8 など) - 偶数行の末尾に追加します
</link>
(例: 行 2、4、6、8 など)
答え1
個人的には、単純な perl/python スクリプトを記述することでこれを実現する方がはるかに簡単だと思いますが、ここでは Notepad++ でそれを実行する方法を紹介します。いくつかのサンプル データで試してみましたが、期待どおりに動作しました。
- 編集したいファイルを開く
- ファイルの最初の行の先頭に移動する
- メニューのマクロ→記録開始オプションをクリックします。
- (タイトル) を挿入し、終了ボタンを押して行の末尾に移動し、(/タイトル) を挿入します。
- ホームボタンを押して行の先頭へ移動します
- 下ボタンを押して2行目に進みます
- (link) を挿入し、終了ボタンを押して行の末尾に移動し、(/link) を挿入します。
- ホームボタンを押して行の先頭へ移動します
- 下ボタンを押して3行目に進みます
- メニューのマクロ→記録停止オプションをクリックします。
これで、マクロを何度でも再生でき、アクションが繰り返されるようになります。
答え2
おそらく、この問題には「交互の行」とは異なる方法でアプローチできるでしょう (これは実際にはスクリプト言語を使用するのが最適です)。
「link」で囲む行にリンクであることを示す内容が含まれていると仮定すると、まずこれらの行を置き換え、その後に残っている行はすべてタイトルであると仮定できます。つまり、リンク行に「http」が含まれているとします。
- Control-H置換ダイアログを表示する
- 検索条件として入力します
(http.*)
(その中の行を検索しhttp
、変数に格納します)\1
- 置換条件として入力します
(link)\1(/link)
- 前のステップで見つかったものをリンクタグに含まれるものと置き換えます - すべて置換 - これですべてのリンク行が囲まれ、残りの行はタイトルにする必要があります
- 検索条件として入力します
^([^(\(link\))]*)$
(含まれていない行を検索します)(link)
(title)\1(/title)
置換条件として入力- すべて置換
これにより、残りの行がタイトル タグで囲まれます。
答え3
編集:この回答は、Notepad++ バージョン 5.9.8 を使用して作成およびテストされており、現在のバージョンの Notepad++ (v 6.2) およびほとんどの以前のバージョンで機能します。この回答を書いた後、Notepad++ を現在のバージョン 6.2 に更新したところ、解決策がはるかに簡単になりました。したがって、Notepad++ バージョン 5.9.8 (またはそれ以前のバージョン) を使用していて、現在のバージョンの Notepad++ に更新したくない場合は、この回答が役立ちます。Notepad++ バージョン 6 以降にアップグレードした場合は、はるかに簡単な他の回答を参照してください。
これを元のファイルとして使用します:
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
ステップ 1.すべての行の先頭と末尾に 「 <title>
」と「 」を含む一意のタグを配置します。</title>
In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):
F:^(.*)$
R:<##@@Begin@@##><title>\1</title><##@@End@@##>
結果は次のようになります:
<##@@Begin@@##><title>This is line 1</title><##@@End@@##>
<##@@Begin@@##><title>This is line 2</title><##@@End@@##>
<##@@Begin@@##><title>This is line 3</title><##@@End@@##>
<##@@Begin@@##><title>This is line 4</title><##@@End@@##>
<##@@Begin@@##><title>This is line 5</title><##@@End@@##>
<##@@Begin@@##><title>This is line 6</title><##@@End@@##>
<##@@Begin@@##><title>This is line 7</title><##@@End@@##>
ステップ 2. すべての「改行」(\r\n) を削除します。
In "Extended" mode:
F:\r\n
R:
結果は次のようになります (ファイル全体が 1 行に収まります)。
<##@@Begin@@##><title>This is line 1</title><##@@End@@##><##@@Begin@@##><title>This is line 2</title><##@@End@@##><##@@Begin@@##><title>This is line 3</title><##@@End@@##><##@@Begin@@##><title>This is line 4</title><##@@End@@##><##@@Begin@@##><title>This is line 5</title><##@@End@@##><##@@Begin@@##><title>This is line 6</title><##@@End@@##><##@@Begin@@##><title>This is line 7</title><##@@End@@##>
ステップ 3. 2 行ごとに 2 行目 (「偶数行」) の 「 <title>
」と「」を「 」</title>
に変更します。<link>
</link>
In "Regular Expression" Mode:
F:<##@@Begin@@##>(<title>.*?</title><##@@End@@##>)<##@@Begin@@##><title>(.*?)</title>(<##@@End@@##>)
R:\1<link>\2</link>\3
結果は次のようになります (ファイル全体は依然として 1 行のままです)。
<title>This is line 1</title><##@@End@@##><link>This is line 2</link><##@@End@@##><title>This is line 3</title><##@@End@@##><link>This is line 4</link><##@@End@@##><title>This is line 5</title><##@@End@@##><link>This is line 6</link><##@@End@@##><title>This is line 7</title><##@@End@@##>
ステップ 4. 「終了」タグを「改行」(\r\n) に置き換えます。
In "Extended" mode:
F:<##@@End@@##>
R:\r\n
結果は次のようになります:
<title>This is line 1</title>
<link>This is line 2</link>
<title>This is line 3</title>
<link>This is line 4</link>
<title>This is line 5</title>
<link>This is line 6</link>
<title>This is line 7</title>
つまり、4 つの手順です。これを 1 回だけ、またはごくまれにしか実行しない場合は、悪くありません。
Notepad++ の大きな制限は、「拡張」と「正規表現」の検索/置換を組み合わせることができないことです。つまり、「拡張」モードでは「改行」を検索できますが、「ワイルドカード」 (*.?) を使用して検索することはできません。また、「正規表現」モードでは「ワイルドカード」を使用して検索できますが、「改行」を検索することはできません。
これを定期的に行う必要がある場合は、Textpad(http://textpad.com) の場合は、2 つの手順で実行できます (ファイルの行数が「奇数」である可能性がある場合)。
ステップ 1.すべての行に " <title>
" " " を追加します。</title>
In "Regular Expression" Mode (F: is Find expression, R: is Replace expression):
F:^(.*)$
R:<title>\1</title>
ステップ 2. 2 行おきの 2 行目 (「偶数行」) の 「 <title>
」と「</title>
」を「<link>
」と「 」に変更します。</link>
Still in "Regular Expression" Mode:
F:^(<title>.*</title>)\n<title>(.*)</title>
R:\1\n<link>\2</link>
Textpad では、ファイルに常に「偶数」の行数があることがわかっている場合は、すべてを 1 回で実行できます。
In "Regular Expression" Mode:
F:^(.*)\n(.*)\n
R:<title>\1</title>\n<link>\2</link>\n
この置換は awk で簡単に行うこともできます。
編集:ここに、awk を使用して実行するための情報と例を示します。
Awk は Unix 用に作成されたスクリプト プログラミング言語ですが、現在は Windows でも使用でき、Mac でも使用できると思います。
awk の主な用途は、テキスト出力とテキスト ファイルを処理 (操作およびフィルタリング) することです。たとえば、「ログ」ファイルを処理して特定のフィールドと行を印刷します。
Awk にはユーザー インターフェイスがありません。通常はコマンド ウィンドウ プロンプト、または「シェル スクリプト」(UNIX) や「バッチ ファイル」(Windows) から実行されるプログラムです。
awk を実行するときにコマンド ラインで awk コマンドを指定するか、awk コマンド スクリプト ファイルを作成することによって、処理中のテキストをどのように処理するかを awk に指示します。
Unix では、awk コマンドをすべて awk スクリプト ファイルではなくコマンド ラインで指定するのが一般的です。Windows ではその逆です。awk がコマンド内で引用符、括弧、その他の句読点を使用する方法のため、awk スクリプトは一般に (おそらく常に) Windows コマンド プロンプトを混乱させます。そのため、Windows では、awk コマンドを awk スクリプト ファイルに入れて awk を使用する方がほぼ常に適切です。
質問に対する解決策として awk を使用する例を次に示します。
まず、操作したいテキストが次の名前のファイルにあるとします。
example.txt
次に、次のコードを含むファイルを作成します。oddeven.awk (または任意の名前) として保存できます。
{
if (NR % 2 == 1)
{
print "<title>"$0"</title>"
}
else
{
print "<link>"$0"</link>"
}
}
あるいは、次のように awk スクリプトを 1 行で指定することもできます。
{ if (NR % 2 == 1) {print "<title>" $0 "</title>"} else {print "<link>" $0 "</link>"} }
使用する awk コマンドライン パラメータは次のとおりです。
-f "oddeven.awk" This is the name of the awk command script file.
"example.txt" This is the name of the text file you are reading (and manipulating).
"output.txt" This is the name of the file you are creating that will contain the modified text.
次に、awk を呼び出すために使用するコマンド ラインは次のようになります。
awk -f "oddeven.awk" "example.txt" > "output.txt"
ファイルを変更するこのプロセスが「一度だけ」のものである場合、スクリプト言語を学習するよりも、Notepad++ または別のテキスト エディターを使用する方が簡単でしょう。
ただし、同じプロセスを何度も実行する場合、またはプロセスを自動化してシェル スクリプト (UNIX) またはバッチ ファイル (Windows) から実行できるようにする場合は、awk を使用するのが最適です。
答え4
これは明確な答えではないことは承知していますが、正しい方向へ導くことができるでしょう。このサイト正規表現モードで置換機能を使用して、行の先頭と末尾に何かを挿入する方法を示します。
例: 検索対象: ^(.+)$ 置換: title\1/title
これですべての行が編集されますが、まだ半分しか終わっていません。