1. ホーム
  2. regex

[解決済み] sed, awk, gawk を使ってマッチしたものだけを表示するには?

2022-12-31 16:10:21

質問

sed、awk、gawk を使って検索と置換を行う方法について、たくさんの例やマニュアルページを見かけますが、どのようにすればよいのでしょうか?

しかし、私の場合、特定の値を抽出するためにテキスト ファイルに対して実行したい正規表現があります。 検索と置換はしたくないのです。 これはbashから呼び出されています。 例を使ってみましょう。

正規表現の例です。

.*abc([0-9]+)xyz.*

入力ファイルの例。

a
b
c
abc12345xyz
a
b
c

このように単純に聞こえますが、sed/awk/gawkを正しく呼び出す方法がわかりません。 私がやりたいと思っていたことは、私のbashスクリプトの中からです。

myvalue=$( sed <...something...> input.txt )

私が試したものは以下の通りです。

sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file
sed -n 's/.*([0-9]).*/\\1/g' example.txt # extracts nothing

どのように解決するのですか?

私の sed (Mac OS X) では動作しませんでした。 + . 試しに * の代わりに p タグを追加しました。

sed -n 's/^.*abc\([0-9]*\)xyz.*$/\1/p' example.txt

少なくとも1つの数値文字にマッチするため + を使用します。

sed -n 's/^.*abc\([0-9][0-9]*\)xyz.*$/\1/p' example.txt