如何在匹配某些模式后从变量中删除文本?

如何在匹配某些模式后从变量中删除文本?

我想删除某些模式之前的一些文本。例如:

VAR="This is a test script text and real script text."
PATTERN="test "

我想要的期望输出是:

NEW_VAR="script text and real script text."

答案1

如果您使用的 shell 支持类型的参数扩展${WORD##*STR},那么您需要做的就是下面。

printf '%s\n' "${VAR##*$PATTERN}"

要将其存储在新变量中,请使用命令替换技巧$(..)或 useprintf的固有功能将格式化字符串存储在新变量中

printf -v NEW_VAR '%s' "${VAR##*$PATTERN}"
printf '%s\n' "$NEW_VAR"

使用 shell 进行替换比分叉外部实用程序(如sed或 )更有效awk

引用自参数扩展 Bash Hackers Wiki

${PARAMETER##PATTERN}

这种形式是从尝试匹配它的所描述的模式中删除字符串的开头。操作员##将尝试删除最长的文本匹配。

答案2

不需要printf- 使用“参数扩展”分配新变量:

NEW=${VAR#*$PATTERN}
echo $NEW
script text and real script text.

相关内容