繁体   English   中英

ksh shell脚本查找字符串中_的第一个匹配项并删除所有内容,直到

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

我是Shell脚本的新手。使用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模式匹配/子值,例如

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

输出

xx333.txt

这意味着/就像sed一样匹配最长的字符串。

高温超导

您可以使用cut命令:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM