Regex 如何使用正则表达式剪切字符串直到出现第一个数值
我试图写一个脚本,它可以从字符串中提取单词,直到第一个数字出现 示例:-我有一个名为Regex 如何使用正则表达式剪切字符串直到出现第一个数值,regex,shell,awk,sed,cut,Regex,Shell,Awk,Sed,Cut,我试图写一个脚本,它可以从字符串中提取单词,直到第一个数字出现 示例:-我有一个名为typed-list-4.1.3.Final.jar的文件,我希望输出为:-typed-list.jar 由于所有文件都有不同的名称,但是,它们以版本号和扩展名.jar结尾,所以我尝试sed第一个数字出现的部分,然后附加.jar 我的文件看起来像:- log4j-slf4j-impl-2.8.2.jar,hibernate-core-5.0.12.Final.jar等 我试图像这样使用sed命令,但它不起作用:-
typed-list-4.1.3.Final.jar的文件,我希望输出为:-typed-list.jar
由于所有文件都有不同的名称,但是,它们以版本号和扩展名.jar
结尾,所以我尝试sed
第一个数字出现的部分,然后附加.jar
我的文件看起来像:-
log4j-slf4j-impl-2.8.2.jar,hibernate-core-5.0.12.Final.jar
等
我试图像这样使用sed
命令,但它不起作用:-
sed-i的/-[0-9]*$//g'test1.sh
——其中test1.sh
包含以下字符串“typed-list-4.1.3.Final.jar
”如何:
sed 's/-\([0-9]\+\.\)\+[0-9]\+.*\.jar/.jar/' Input_file
所提供输入的结果:
typed-list.jar
log4j-slf4j-impl.jar
hibernate-core.jar
正则表达式与子字符串匹配,例如:
- 以破折号开始
-
- 数字的模式重复点位李>
- 中间的一些其他子字符串(例如
Final
)
- 以扩展名
.jar
然后,sed
命令仅用扩展名替换匹配的子字符串
希望这有帮助。Sed:
sed -E 's/(.*)-([[:digit:]]+\.){2}[[:digit:]]+.*(\.[^.]+)$/\1\3/' dat
@古里我在回答中加了一些解释。另外,考虑到版本号包含多个数字的情况,我修改了sed
命令。比尔。
log4j-slf4j-impl.jar
hibernate-core.jar
typed-list.jar
echo typed-list-4.1.3.Final.jar | awk 'sub(/-4.{10}/,"",$0)'
typed-list.jar