使用 shell 获取一行中两个特殊字符之间的文本

使用 shell 获取一行中两个特殊字符之间的文本

我有一行来自文件:

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

相关内容