拆分应用程序名称和版本的字符串
Splitting strings for appname and version
我有一个包含几个字符串的文件。
喜欢:
appname-2021.12.24
appname2020-2021.12.23
app_name-2021.12.01
app_name2020-2021.12.02
app-name-2021.11.10
我想要这些字符串中的应用程序名称和版本在单个变量中,这样我就可以从我的脚本中输出一个 csv 文件
在这种情况下:
appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10
版本始终是带点的子字符串,前面有 -。
我的想法是将名称和版本放在一个单独的变量中,并最终将其合并到一个带有额外逗号的新变量中
string = $appname","$appversion
我试过将 cut
与 - 分隔符一起使用,但这不适用于示例 5。
使用 grep -Eo “[a-zA-Z_]+”
也不起作用,缺少示例 2 中的 2020.
是否可以找到从行尾到第一行的所有歌曲和点?
与bash
:
while read -r line; do
if [[ "$line" =~ (.*)-([^-]+)$ ]]; then
string="${BASH_REMATCH[1]},${BASH_REMATCH[2]}"
echo "$string"
fi
done < file
输出:
appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10
参见:The Stack Overflow Regular Expressions FAQ
简而言之bash
:
#!/bin/bash
while read -r line; do
printf '%s,%s\n' "${line%-*}" "${line##*-}"
done < file
或者,使用 sed
一行:
sed 's/\(.*\)-/,/' file
$ sed 's/-\([^-]*\)$/,/' file
appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10
我有一个包含几个字符串的文件。 喜欢:
appname-2021.12.24
appname2020-2021.12.23
app_name-2021.12.01
app_name2020-2021.12.02
app-name-2021.11.10
我想要这些字符串中的应用程序名称和版本在单个变量中,这样我就可以从我的脚本中输出一个 csv 文件 在这种情况下:
appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10
版本始终是带点的子字符串,前面有 -。
我的想法是将名称和版本放在一个单独的变量中,并最终将其合并到一个带有额外逗号的新变量中
string = $appname","$appversion
我试过将 cut
与 - 分隔符一起使用,但这不适用于示例 5。
使用 grep -Eo “[a-zA-Z_]+”
也不起作用,缺少示例 2 中的 2020.
是否可以找到从行尾到第一行的所有歌曲和点?
与bash
:
while read -r line; do
if [[ "$line" =~ (.*)-([^-]+)$ ]]; then
string="${BASH_REMATCH[1]},${BASH_REMATCH[2]}"
echo "$string"
fi
done < file
输出:
appname,2021.12.24 appname2020,2021.12.23 app_name,2021.12.01 app_name2020,2021.12.02 app-name,2021.11.10
参见:The Stack Overflow Regular Expressions FAQ
简而言之bash
:
#!/bin/bash
while read -r line; do
printf '%s,%s\n' "${line%-*}" "${line##*-}"
done < file
或者,使用 sed
一行:
sed 's/\(.*\)-/,/' file
$ sed 's/-\([^-]*\)$/,/' file
appname,2021.12.24
appname2020,2021.12.23
app_name,2021.12.01
app_name2020,2021.12.02
app-name,2021.11.10