10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv
如何在每个和_
之间获取字符串如aaa bbb
答案 0 :(得分:1)
Pure Bash:
string="10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv"
IFS=',' # separator for splitting
array=( ${string#*,} ) # split string after the first comma
array=( ${array[@]%%_*} ) # delete trailing '_*' for each element
echo -e "${array[@]}" # gives 'aaa bbb'
答案 1 :(得分:0)
下面是一个例子
echo "10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" | grep -o ",[^_]*_"
好吧,上面的命令将在输出中包含','和'_' 要排除这种情况,您可以使用
echo "10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv" | pcregrep -o "(?<=,).*?(?=_)"
传递给pcregrep的正则表达式(?<=,).*?(?=_)
使用'pbegrep'支持的正则表达式的'lookbehind'和'lookahead'技术扮演重要角色
答案 2 :(得分:0)
$ s="10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv"
$ echo $s|tr "_" "\n"|sed -n '/,/s/.*,//p'
aaa
bbb
答案 3 :(得分:0)
如果您要求的是纯粹的Bash解决方案,即您不想调用外部程序,您可以尝试这样的事情:
str=10.11.183.81,aaa_XXX150.csv,bbb_YYYY_20100807.csv
while [[ "$str" =~ "," ]]; do
str=${str#*,}
echo ${str%%_*}
done
输出是:
aaa
bbb
只要字符串中至少有一个剩余的逗号,就会执行while循环。然后第一行从字符串左侧删除所有字符,直到并包括第一个逗号,第二行打印字符串,排除从第一个下划线到字符串末尾的所有内容。
请注意,原始字符串($ str)已被修改。