Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用正则表达式剪切字符串直到出现第一个数值_Regex_Shell_Awk_Sed_Cut - Fatal编程技术网

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