2016-08-05 123 views
-1

进入Shell脚本。使用KSH Shell。你能帮我解决这个问题吗?ksh shell脚本在字符串中查找_的第一次出现,并删除所有内容,直到

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

我的输出应ApplicationData_2_333.txt

+1

我们可以帮助你,但你要问一个具体问题。不只是“这是我想要的,请为我做”。做一个尝试,展示代码并询问与代码有关的特定*问题,以帮助您克服被阻止的事情。 – kaylum

+1

新的shell脚本?当你有选择时,你可能想使用'bash'而不是'ksh'。这个问题不需要,但让你访问更多的内置函数(在bash中执行简单快速的事情,在ksh中执行困难)。 –

+0

感谢Kaylum,下次我肯定会发布我尝试的代码。 – PKR

回答

1

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

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

输出

ApplicationData_2_333.txt 

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

还有##,其从左侧删除最长匹配,这将使你

333.txt 

也有类似的去除运营商从字符串,%的右侧和最长匹配工作(右)与%%

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

版本(bashzsh和可能其他人)还支持sed状图案匹配/子值等

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

输出

xx333.txt 

这意味着/作品如sed匹配最长的字符串。

IHTH

1

可以使用cut命令:

echo "errorfile101_ApplicationData_2_333.txt" | cut -d"_" -f2- 
相关问题