如果找到子字符串,我需要搜索一个字符串,将该字符串打印到子字符串的末尾,即
str="this is a long string"
substring="long"
expected="this is a long"我尝试过bash字符串操作,但失败了。尝试使用awk命令,但我无法正确执行。如果子字符串不是在变量中,但是我需要在变量中使用它,因为输入是不同的。
awk -F'long' '{print $1}' <<<$str
awk -v myvar="$substring" -F'myvar' '{print $1}' <<<$str打印整根绳子。任何帮助都将不胜感激。
发布于 2022-10-28 09:19:07
如果您寻找的是bash唯一的解决方案,其中一个选项是:
sfx="${str#*${substring}}"
expected="${str%"${sfx}"}"它使用前缀删除(任何事物+ $substring)来确定尾随部分。然后使用后缀移除从$str中修剪,得到预期值。
由于您似乎对shell之外的答案没有意见(比如使用awk),下面的sed也是如此
echo "$str" | sed -e 's#^\(.*'"${substring}"'\).*#\1#'->将整行与保存在第一个组中的$substring匹配,并将该行替换为第一个匹配组的内容。
注意:这两个例子都不是贪婪的,并且将匹配到第一个$substring。
发布于 2022-10-28 11:08:48
包括不存在子字符串的情况下的错误处理:
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字符,则需要它们。
发布于 2022-10-28 11:29:40
# echo "$str" | awk -F'long' '{print $1FS}'
this is a longhttps://stackoverflow.com/questions/74233022
复制相似问题