首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strstr()替代bash

strstr()替代bash
EN

Stack Overflow用户
提问于 2022-10-28 09:07:35
回答 3查看 49关注 0票数 0

如果找到子字符串,我需要搜索一个字符串,将该字符串打印到子字符串的末尾,即

代码语言:javascript
复制
str="this is a long string"
substring="long"
expected="this is a long"

我尝试过bash字符串操作,但失败了。尝试使用awk命令,但我无法正确执行。如果子字符串不是在变量中,但是我需要在变量中使用它,因为输入是不同的。

awk -F'long' '{print $1}' <<<$str

代码语言:javascript
复制
awk -v myvar="$substring"  -F'myvar' '{print $1}' <<<$str

打印整根绳子。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-28 09:19:07

如果您寻找的是bash唯一的解决方案,其中一个选项是:

代码语言:javascript
复制
sfx="${str#*${substring}}"
expected="${str%"${sfx}"}"

它使用前缀删除(任何事物+ $substring)来确定尾随部分。然后使用后缀移除从$str中修剪,得到预期值。

由于您似乎对shell之外的答案没有意见(比如使用awk),下面的sed也是如此

代码语言:javascript
复制
echo "$str" | sed -e 's#^\(.*'"${substring}"'\).*#\1#'

->将整行与保存在第一个组中的$substring匹配,并将该行替换为第一个匹配组的内容。

注意:这两个例子都不是贪婪的,并且将匹配到第一个$substring

票数 0
EN

Stack Overflow用户

发布于 2022-10-28 11:08:48

包括不存在子字符串的情况下的错误处理:

代码语言:javascript
复制
str="this is a long string"
substring="long"
if [[ $str =~ (.*"$substring") ]]
then
  expected=${BASH_REMATCH[1]}
else
  echo ERROR: Substring not found >&2
fi

虽然$substring周围的引号对于您的具体示例并不是必需的,但是如果substring包含特殊的regex字符,则需要它们。

票数 0
EN

Stack Overflow用户

发布于 2022-10-28 11:29:40

代码语言:javascript
复制
# echo "$str" | awk -F'long' '{print $1FS}'

this is a long
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74233022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档