次の行があり、その間にすべての単語が必要です。選ぶそして完璧
vertical on; select blah blah blah contains all special characters including /*?&; Done
答え1
bash正規表現を使用すると、次のようになります(変数に行があると仮定)。
$ line="vertical on; select blah blah blah contains all special characters including /*?&; Done"
$ [[ "$line" =~ select(.*)Done ]] && echo ${BASH_REMATCH[1]}
blah blah blah contains all special characters including /*?&;
答え2
この試み、
sed -e 's/.*select//;s/Done.*//'
答え3
努力する
sed -e 's/select\(.*\)Done/\1/'
答え4
Perl互換正規表現(PCRE)を使用してください。
(?<=word1).*?(?=word2)
上記のパターンをGNUに適用しますgrep
。
$ grep -Po '(?<=select).*?(?=Done)' <<< ' vertical on; select blah blah blah contains all special characters including /*?&; Done'
blah blah blah contains all special characters including /*?&;
説明する
(?<=word1)
: マッチword1
今後現在地を検索しますが、結果には含まれません。.*?
:すべての文字列と一致します。(?=word2)
: マッチword2
後ろに現在地を検索しますが、結果には含まれません。
と(?<=word1)
モードを(?=word2)
総称して周りを見てください。 POSIXエンジン(BREおよびERE)はこの機能をサポートしていないため、より強力なエンジン(PCREなど)が必要です。