次のBashコマンドラインでは、部分文字列が二重引用符で囲まれている場合に、部分文字列のインデックスを取得できます。
text='123ABCabc((XYZabc((((((abc123(((123'
echo $text | awk '{ print index($0, "((((a" )}' # 20 is the result.
ただし、私のアプリケーションでは、この例の「a」がどこにあるのかわかりません。したがって、「a」を「(」以外の文字を受け入れる正規表現に置き換えることができると思いました。/[^(} /)が必要だと思いました。しかし、Awkインデックスを取得できませんでした。例の"((((a"の代わりに任意の形式の正規表現を使用するコマンド。
更新: William Pursellは、インデックス操作が2番目のオペランドとして正規表現を受け入れないことを指摘しました。
最終的に、私が達成しようとしていたのは、4つ以上の「(」の後に1つ以上の「)」が続く部分文字列を抽出することでした。Dennis Williamsonは、次のコードでソリューションを提供しました。
echo 'dksjfkdj(((((((I-WANT-THIS-SUBSTRING)askdjflsdjf' |
mawk '{match($0,/\(\(\(\([^()]*\)/); s = substr($0,RSTART, RLENGTH); gsub(/[()]/, "", s); print s}'
助けてくれてありがとう!