我想删除某些模式之前的一些文本。例如:
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
。
${PARAMETER##PATTERN}
这种形式是从尝试匹配它的所描述的模式中删除字符串的开头。操作员
##
将尝试删除最长的文本匹配。
答案2
不需要printf
- 使用“参数扩展”分配新变量:
NEW=${VAR#*$PATTERN}
echo $NEW
script text and real script text.