Bash 基于存储在变量中的字符串的精确匹配提取数据
所以我试着从一个变量中提取数据Bash 基于存储在变量中的字符串的精确匹配提取数据,bash,unix,sed,grep,Bash,Unix,Sed,Grep,所以我试着从一个变量中提取数据 var="hi hello HI high" # --> This is the input 我想提取的模式保留在 var2="hi" # --> this is the pattern to be matched 如果我的输入是变量var1,那么它应该只提取var2中的模式 技术上,输出应仅具有: hi 它不应拾取部分匹配模式的其他字符串: hi HI high 我尝试使用: echo $var|sed "s/.*\($var2\).*/\
var="hi hello HI high" # --> This is the input
我想提取的模式保留在
var2="hi" # --> this is the pattern to be matched
如果我的输入是变量var1
,那么它应该只提取var2
中的模式
技术上,输出应仅具有:
hi
它不应拾取部分匹配模式的其他字符串:
hi HI high
我尝试使用:
echo $var|sed "s/.*\($var2\).*/\1/p"
以及:
这对我不起作用
另外,请您推荐遵循POSIX标准的解决方案,因为我需要在Solaris和Linux中实现这一想法。如果我正确地解释了这个问题,您可能需要:
var2="hi"
re='\b(hi)\b'
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
hi
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
no match
用于bash中的正则表达式匹配=~
表示捕获的组#1${BASH_REMATCH[1]}
用于单词边界(在OSX上使用\b
)[[[::]]
sed
:
sed "s/.*\<\($var2\)\>.*/\1/" <<< "$var"
hi
如果我对这个问题的解释正确,你可能会想知道:
var2="hi"
re='\b(hi)\b'
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
hi
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
no match
用于bash中的正则表达式匹配=~
表示捕获的组#1${BASH_REMATCH[1]}
用于单词边界(在OSX上使用\b
)[[[::]]
sed
:
sed "s/.*\<\($var2\)\>.*/\1/" <<< "$var"
hi
如果我对这个问题的解释正确,你可能会想知道:
var2="hi"
re='\b(hi)\b'
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
hi
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
no match
用于bash中的正则表达式匹配=~
表示捕获的组#1${BASH_REMATCH[1]}
用于单词边界(在OSX上使用\b
)[[[::]]
sed
:
sed "s/.*\<\($var2\)\>.*/\1/" <<< "$var"
hi
如果我对这个问题的解释正确,你可能会想知道:
var2="hi"
re='\b(hi)\b'
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
hi
var="hi hello HI=really"
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}" || echo "no match"
no match
用于bash中的正则表达式匹配=~
表示捕获的组#1${BASH_REMATCH[1]}
用于单词边界(在OSX上使用\b
)[[[::]]
sed
:
sed "s/.*\<\($var2\)\>.*/\1/" <<< "$var"
hi
让我们一步一步地建立起来
> echo "hi hello HI=really" | grep -o "hi"
hi
为搜索模式创建一个变量
> var2="hi"; echo "hi hello HI=really" | grep -o "$var2"
hi
为源文本创建另一个变量
var2="hi"; var="hi hello HI=really"; echo "$var" | grep -o "$var2"
hi
但我不确定它的实用价值。如果你能说出你原来的问题,也许你会得到更多有用的帮助。让我们一步一步地建立起来
> echo "hi hello HI=really" | grep -o "hi"
hi
为搜索模式创建一个变量
> var2="hi"; echo "hi hello HI=really" | grep -o "$var2"
hi
为源文本创建另一个变量
var2="hi"; var="hi hello HI=really"; echo "$var" | grep -o "$var2"
hi
但我不确定它的实用价值。如果你能说出你原来的问题,也许你会得到更多有用的帮助。让我们一步一步地建立起来
> echo "hi hello HI=really" | grep -o "hi"
hi
为搜索模式创建一个变量
> var2="hi"; echo "hi hello HI=really" | grep -o "$var2"
hi
为源文本创建另一个变量
var2="hi"; var="hi hello HI=really"; echo "$var" | grep -o "$var2"
hi
但我不确定它的实用价值。如果你能说出你原来的问题,也许你会得到更多有用的帮助。让我们一步一步地建立起来
> echo "hi hello HI=really" | grep -o "hi"
hi
为搜索模式创建一个变量
> var2="hi"; echo "hi hello HI=really" | grep -o "$var2"
hi
为源文本创建另一个变量
var2="hi"; var="hi hello HI=really"; echo "$var" | grep -o "$var2"
hi
但我不确定它的实用价值。如果您能说明您原来的问题,您可能会得到更多有用的帮助。因此,给定
var=“abcd abcd2 abcdz=abcds”
您希望提取abcd
作为参数。你要么选择了太相似的名字,要么我的眼睛累了,但我看不出有什么不同。此外,考虑一个固定格式。我希望这不是太混乱现在.. <代码> O/P应该只提取搜索模式在VAR2。< /代码>。这也不清楚。显示给定输入的输出。因此给定var=“abcd abcd2 abcdz=abcds”
您希望提取abcd
给定abcd
作为参数。你要么选择了太相似的名字,要么我的眼睛累了,但我看不出有什么不同。此外,考虑一个固定格式。我希望这不是太混乱现在.. <代码> O/P应该只提取搜索模式在VAR2。< /代码>。这也不清楚。显示给定输入的输出。因此给定var=“abcd abcd2 abcdz=abcds”
您希望提取abcd
给定abcd
作为参数。你要么选择了太相似的名字,要么我的眼睛累了,但我看不出有什么不同。此外,考虑一个固定格式。我希望这不是太混乱现在.. <代码> O/P应该只提取搜索模式在VAR2。< /代码>。这也不清楚。显示给定输入的输出。因此给定var=“abcd abcd2 abcdz=abcds”
您希望提取abcd
给定abcd
作为参数。你要么选择了太相似的名字,要么我的眼睛累了,但我看不出有什么不同。此外,考虑一个固定格式。我希望这不是太混乱现在.. <代码> O/P应该只提取搜索模式在VAR2。< /代码>。这也不清楚。显示给定输入的输出。我认为grep-O在Linux中不可用,如果我错了,请纠正我。。虽然这个想法非常有效,但有没有等效的解决方案?它是lowecase“o”。我很怀疑你的发行版上没有。这是GNU工具,我的错。它工作正常,@Karakfa。正如你所说的小写“o”,我认为grep-o在Linux中是不可用的,如果我错了,请纠正我。。虽然这个想法非常有效,但有没有等效的解决方案?它是lowecase“o”。我很怀疑你的发行版上没有。这是GNU工具,我的错。它工作正常,@Karakfa。正如你所说的小写“o”,我认为grep-o在Linux中是不可用的,如果我错了,请纠正我。。虽然这个想法非常有效,但有没有等效的解决方案?它是lowecase“o”。我很怀疑你的发行版上没有。这是GNU工具,我的错。它工作正常,@Karakfa。正如你所说的小写“o”,我认为grep-o在Linux中是不可用的,如果我错了,请纠正我。。虽然这个想法非常有效,但有没有等效的解决方案?它是lowecase“o”。我很怀疑你的发行版上没有。这是GNU工具,我的错。它正确地工作