[解決済み] grep, regex, perlでパターンに沿った文字列を抽出する方法 [重複].
質問
こんな感じのファイルがあります。
<table name="content_analyzer" primary-key="id">
<type="global" />
</table>
<table name="content_analyzer2" primary-key="id">
<type="global" />
</table>
<table name="content_analyzer_items" primary-key="id">
<type="global" />
</table>
に続く引用符の中にあるものを抽出する必要があります。
name=
すなわち
content_analyzer
,
content_analyzer2
と
content_analyzer_items
.
私はLinuxボックスでこれをやっているので、sed、perl、grepまたはbashを使用した解決策で結構です。
どのように解決するのですか?
コンテンツは結果に含めずにマッチさせる必要があるため(must
マッチ
name="
にマッチしなければならないが、それは目的の結果の一部ではない) ので、何らかの形で
ゼロ幅マッチングまたはグループキャプチャが必要です。 これは以下のツールで簡単に行うことができます。
以下のツールで簡単にできます。
Perl
Perlでは
n
オプションを使って、一行ずつループさせ
キャプチャグループにマッチした場合、その内容を表示します。
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU グレップ
GNU grep のような grep の改良版を持っている場合、以下のようなものがあります。
は
-P
オプションが利用可能です。このオプションは、Perlライクな正規表現を可能にします。
を使用することができます。
\K
を使えるようになります。これはマッチ位置をリセットします。
マッチ位置がリセットされ、それ以前のものはゼロ幅になります。
grep -Po 'name="\K.*?(?=")' filename
は
o
オプションは、grepが行全体ではなく、マッチしたテキストだけを表示するようにします。
を表示します。
Vim - テキストエディタ
もうひとつの方法は、テキストエディタを直接使用することです。Vim では、これを実現するさまざまな方法の 1 つとして
のない行を削除することで、これを達成するさまざまな方法のひとつです。
name=
のない行を削除し、その結果得られた行から内容を抽出することです。
:v/.*name="\v([^"]+).*/d|%s//\1
標準的なgrep
何らかの理由でこれらのツールにアクセスできない場合、標準的な grep を使用して同様のことを行うことができます。 標準的な grep で同様のことが実現できます。しかし、ルックアラウンドなしで を使用すると、後でいくつかのクリーンアップが必要になります。
grep -o 'name="[^"]*"' filename
結果の保存に関する注意事項
上記のすべてのコマンドで、結果は
stdout
. これは
を追加することで、いつでもパイプでファイルに保存できることを覚えておくことが重要です。
ファイルに追記することで保存できます。
> result
をコマンドの末尾に追加します。
関連
-
[解決済み] 正規表現です。+$ VS *$ VS なし
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] grep --ignore-case --only
-
[解決済み] テキストファイルから、特定の文字列を含むすべての行を削除するにはどうすればよいですか?
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] Perlからロケール設定の警告を修正する方法
-
[解決済み] grepで1つの単語を除外するにはどうすればよいですか?
-
[解決済み] 正規表現で部分文字列を抽出する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 小数点以下2桁までの値にマッチする正規表現
-
[解決済み] Atomで改行文字を置き換えるには?
-
[解決済み] 正規表現の主題文字列で空白を無視するには?
-
[解決済み] SQLite のクエリで正規表現を使うにはどうしたらいいですか?
-
[解決済み] 文字列の最後の文字にマッチする正規表現[重複]について
-
[解決済み] grep --ignore-case --only
-
[解決済み] 標準的な10桁の電話番号にマッチする正規表現
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 一致した正規表現パターンを awk で表示するには?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx