我是新的Shell Scripting.Using KSH Shell。你能帮帮我吧吗?
我的字符串类似于errorfile101_ApplicationData_2_333.txt。我希望删除所有内容,直到第一次出现_。
我的输出应该是ApplicationData_2_333.txt
答案 0 :(得分:1)
这是一个简单的假设您可以将字符串分配给变量,即
str="errorfile101_ApplicationData_2_333.txt"
echo ${str#*_}
<强>输出强>
ApplicationData_2_333.txt
#
中的${str#*_}
运算符表示从变量值的左侧删除以下模式。
还有##
,从左侧删除最长的匹配,这会给你
333.txt
还有类似的删除操作符,用于从字符串的右侧%
开始,并使用%%
进行最长的匹配(从右侧开始)。
所有版本的ksh
(以及bash和其他shell)都支持这些运算符。 (对不起,如果这是错误的术语)。
ksh93
及更高版本(bash
,zsh
以及其他可能的其他版本)也支持sed
类似模式匹配/子值,例如
echo ${str/*_/xx}
#----------|--|>replacement
#----------> pattern to match
<强>输出强>
xx333.txt
这意味着/
的工作方式与sed
匹配最长的字符串。
IHTH
答案 1 :(得分:1)
您可以使用cut
命令:
echo "errorfile101_ApplicationData_2_333.txt" | cut -d"_" -f2-