
我有一行來自文件:
cat aaa.txt | grep "HIJK"
輸出給出:
HIJK="My name is HIJK"
我需要將文字My name is HIJK
放入 shell 腳本中的變數中。
我已經嘗試過這個,但它不起作用:
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