Linux 带正则表达式的Bash子字符串

Linux 带正则表达式的Bash子字符串,linux,bash,substring,Linux,Bash,Substring,在bash脚本中,我想从给定字符串中提取变量字符串。我的意思是,我想从字符串中提取字符串file.txt: This is the file.txt from my folder. 我试过: var=$(echo "This is the file.txt from my folder.") var=echo ${var##'This'} ... 但是我希望使用expr、sed或awk命令以更简洁的方式实现 谢谢 编辑: 我找到了另一种方法(尽管如此,sed命令的答案对我来说是最好的): 以

在bash脚本中,我想从给定字符串中提取变量字符串。我的意思是,我想从字符串中提取字符串
file.txt

This is the file.txt from my folder.
我试过:

var=$(echo "This is the file.txt from my folder.")
var=echo ${var##'This'}
...
但是我希望使用
expr
sed
awk
命令以更简洁的方式实现

谢谢

编辑:

我找到了另一种方法(尽管如此,sed命令的答案对我来说是最好的):


以下解决方案使用带有
s/
(替换)的
sed
来移除前导和后导零件:

echo "This is the file.txt from my folder." | sed "s/^This is the \(.*\) from my folder.$/\1/"
输出:

file.txt
\(
\)
随附我们想要保留的零件。这就是所谓的群体。因为它是我们在这个表达式中使用的第一个(也是唯一的)组,所以它是组1。稍后,我们在替换字符串中使用
\1
引用该组

^
$
符号确保匹配完整的字符串。这仅在文件名包含“我的文件夹”中的“代码”的特殊情况下才是必需的。或
“这是“

您可以尝试grep:

var=$(egrep -o file.txt)

如果“file.txt”是一个固定字符串,并且不会更改,那么您可以这样做:

var=“这是我文件夹中的file.txt”

请注意,您不需要将字符串回显到变量,只需在二进制“=”运算符的右侧键入它即可

echo$var | sed-e的/^.*\(file\.txt\).$/\1/'

根据您的sed(1)版本,如果在sed(1)中有-r(extended regexp)选项,则可以取消括号的转义

如果“file.txt”发生更改,则可以尽最大努力创建模式,如:

echo$var | sed-e的/^.\([^]\+\.[^]\+\).$/\1/'

var=$(egrep -o file.txt)