ksh shell 脚本来查找字符串中第一次出现的 _ 并删除所有内容直到

ksh shell script to find first occurence of _ in string and remove everything until that

我是 Shell Scripting.Using KSH Shell 的新手。你能帮我一下吗?

我的字符串就像 errorfile101_ApplicationData_2_333.txt。我想删除所有内容,直到第一次出现 _.

我的输出应该是ApplicationData_2_333.txt

这很简单,假设您可以将字符串分配给一个变量,即

str="errorfile101_ApplicationData_2_333.txt"
echo ${str#*_}

输出

ApplicationData_2_333.txt

${str#*_} 中的 # 运算符表示从变量值的左侧删除以下模式。

还有##,它从左边删除最长的匹配,这会给你

333.txt

也有类似的删除运算符,用于从字符串的右侧开始工作,%%% 的最长匹配(从右侧开始)。

所有版本的 ksh(以及 bash 和其他 shell)都支持这些运算符。 (抱歉,如果这是错误的术语)。

ksh93 及更高版本(bashzsh 可能还有其他版本)也支持 sed 类模式 match/sub 值,如

echo ${str/*_/xx}
#----------|--|>replacement
#----------> pattern to match

输出

xx333.txt

这意味着 / 的工作方式类似于 sed 匹配最长的可能字符串。

IHTH

您可以使用cut命令:

echo "errorfile101_ApplicationData_2_333.txt" | cut -d"_" -f2-