我有一行来自文件:
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