ファイルには次の行があります。
cat aaa.txt | grep "HIJK"
出力は以下を提供します。
HIJK="My name is HIJK"
My name is HIJK
シェルスクリプトの変数にテキストを入れる必要があります。
私はこれを試しましたがうまくいきません:
cat aaa.txt | grep "HIJK" | sed -n '/\"/,/\"/p'
答え1
またはミックスに追加するには、以下を使用して問題を解決しますawk
。
awk -F'"' '$1 ~ /HIJK/ {print $2}' aaa.txt
印刷:-
My name is HIJK
答え2
IFS
これに使用されます
$ IFS=\= read var1 var2 <<< $(grep "HIJK" aaa.txt)
$ echo $var1
HIJK
$ echo $var2
"My name is HIJK"
$ var2="${var2%\"}" // remove double quotes on both sides
$ var2="${var2#\"}"
$ echo $var2
My name is HIJK
答え3
sed
デフォルトの正規表現を使用してください。
$ grep "HIJK" aaa.txt | sed 's/.*="\(.*\)"/\1/g'
My name is HIJK
sed
拡張正規表現を使用してください。
$ grep "HIJK" aaa.txt | sed -r 's/.*="(.*)"/\1/g'
My name is HIJK
二重引用符はすでに一重引用符内にあるため、エスケープする必要はありません(したがって、特殊でないため、リテラルとして扱われます)。
grep -oP
あなたのバージョンがこの機能をサポートしている場合は、次のものを使用することもgrep
できます。
$ grep "HIJK" aaa.txt | grep -oP '(?<==").*(?=")'
My name is HIJK
イニシャルがgrep
前のテキストであることが確実であれば、=
次のように短縮できます。
$ grep -oP '(?<=HIJK=").*(?=")' aaa.txt
My name is HIJK
答え4
この方法はうまくいきます(ただし可能ではありませsed
んgrep
)。
VAR=$(sed 's/.*"\([^\"]*HIJK[^\"]*\)\"/\1/g' aaa.txt)
可変コンテンツ:
echo $VAR
My name is HIJK