多くの情報を含むtxtファイルを生成するスクリプトがあります。特定のテキストがあることを確認してから、後ろの内容をコピーしたいと思います。たとえば、以下はtxtファイルです。
blablablaWANTEDTEXT[TEXTTOCOPY]blablabla...
存在することを確認しWANTEDTEXT
、存在する場合は次の内容をコピーします[
。]
TEXTTOCOPY
ありがとう
答え1
> echo blablablaWANTEDTEXT[TEXTTOCOPY]blablabla... |
> awk -v searchtext=WANTEDTEXT '$0 ~ searchtext "\\[.*\\]" {
strstart=index($0,searchtext "[")+length(searchtext)+1;
tmpstr=substr($0,strstart); sub("].*$","",tmpstr); print tmpstr; } '
TEXTTOCOPY
答え2
echo '....' | grep -oP 'WANTEDTEXT\[\K[^]]*'
grep
このモードで動作することは、Perl
Perl正規表現を書くことができgrep
、-o
通常どおり行全体ではなく一致する部分だけが印刷されることを意味します。
注:左側の項目は\K
出力に表示されません。grep
一致するが出力しないときに使用されることを示すGuardianフラグ(後ろを見ますが可変長です)。
結果:
TEXTTOCOPY
答え3
#!/bin/bash
greptext=$(echo blablablaWANTEDTEXT[TEXTTOCOPY]blablabla | grep "WANTEDTEXT")
if [[ -n $greptext ]]; then
ftext=$(echo "blablablaWANTEDTEXT[TEXTTOCOPY]blablabla" | cut -d'[' -f2 | cut -d']' -f1)
echo $ftext
fi