ksh shell脚本在字符串中查找_的第一个出现并删除所有内容

时间:2016-08-05 03:02:58

标签: linux shell unix ksh

我是新的Shell Scripting.Using KSH Shell。你能帮帮我吧吗?

我的字符串类似于errorfile101_ApplicationData_2_333.txt。我希望删除所有内容,直到第一次出现_。

我的输出应该是ApplicationData_2_333.txt

2 个答案:

答案 0 :(得分:1)

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

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

<强>输出

ApplicationData_2_333.txt

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

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

333.txt

还有类似的删除操作符,用于从字符串的右侧%开始,并使用%%进行最长的匹配(从右侧开始)。

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

ksh93及更高版本(bashzsh以及其他可能的其他版本)也支持sed类似模式匹配/子值,例如

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

<强>输出

xx333.txt

这意味着/的工作方式与sed匹配最长的字符串。

IHTH

答案 1 :(得分:1)

您可以使用cut命令:

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