Linux 带正则表达式的Bash子字符串
在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命令的答案对我来说是最好的): 以
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)