使用 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

相關內容