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
及更高版本(bash
、zsh
可能还有其他版本)也支持 sed
类模式 match/sub 值,如
echo ${str/*_/xx}
#----------|--|>replacement
#----------> pattern to match
输出
xx333.txt
这意味着 /
的工作方式类似于 sed
匹配最长的可能字符串。
IHTH
您可以使用cut
命令:
echo "errorfile101_ApplicationData_2_333.txt" | cut -d"_" -f2-
我是 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
及更高版本(bash
、zsh
可能还有其他版本)也支持 sed
类模式 match/sub 值,如
echo ${str/*_/xx}
#----------|--|>replacement
#----------> pattern to match
输出
xx333.txt
这意味着 /
的工作方式类似于 sed
匹配最长的可能字符串。
IHTH
您可以使用cut
命令:
echo "errorfile101_ApplicationData_2_333.txt" | cut -d"_" -f2-