Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 在unix中将变量的子字符串与另一个字符串进行比较_Regex_Unix_Sed_Grep_Ksh - Fatal编程技术网

Regex 在unix中将变量的子字符串与另一个字符串进行比较

Regex 在unix中将变量的子字符串与另一个字符串进行比较,regex,unix,sed,grep,ksh,Regex,Unix,Sed,Grep,Ksh,我是Unix的初学者。如果这个问题听起来太站不住脚,我深表歉意 我将把一个参数传递给变量fullstring=$1。此变量的输入可能与这些选项类似,例如tester.txt或tester.sh或testapece.zip或testing.bad或*.基本上它类似于包含文件名通配符模式和文件类型的字符串 在这里,我只需要从参数中传递的字符串中剪切文件类型,也就是说,基本上我需要从“.”剪切字符串,直到结束,并且我需要将它与IF子句中的多个字符串进行比较 代码结构大纲将类似于以下结构: IF sub

我是Unix的初学者。如果这个问题听起来太站不住脚,我深表歉意

我将把一个参数传递给变量
fullstring=$1
。此变量的输入可能与这些选项类似,例如tester.txt或tester.sh或testapece.zip或testing.bad或
*.
基本上它类似于包含文件名通配符模式和文件类型的字符串

在这里,我只需要从参数中传递的字符串中剪切文件类型,也就是说,基本上我需要从“.”剪切字符串,直到结束,并且我需要将它与IF子句中的多个字符串进行比较

代码结构大纲将类似于以下结构:

IF substring of variable(just the filetype in the variable)  is not equals to any of the set of 4 predefined file type strings (txt,zip,csv,*)
THEN 
     ECHO "file is not in the required file type"
     EXIT
ELSE
     ECHO "file is in required file type"
FI
如果有人能在if子句中帮助我比较条件,那将很有帮助。提前谢谢

注意:我们可以传递literal
*
作为文件类型,它应该与
*

进行字面上的比较,其工作原理如下:

str="a.txt"
if [ "${str##*.}" = "txt" ] ; then
    do this
else
    do that
fi

${str###*.}
是一种所谓的参数扩展。请在此处查找更多信息:

您可能需要basename而不是正则表达式。你肯定应该写一个程序来尝试解决这个问题,然后在遇到问题时询问——stackoverflow不是一个请求编写算法的平台。你想在Bash中写这个吗?还有别的贝壳吗?标记缺少一种语言。我想用KSHHi scott johnson编写此代码,抱歉。这实际上是我写的一个更大的代码,这个IF条件是完整代码的一部分,我无法在其中实现。我不确定能否提供完整的代码。因此,我只是提供了更多的细节,我正在寻找。我确实试图实现这一点,但无法修复它,所以请联系stackoverflow专家征求您的建议。感谢文件名扩展只是约定。。。文本文件不需要有
.txt
扩展名,
.zip
可能意味着不止一件事,等等。您可以/应该先检查实际类型,然后检查扩展名(如有必要)。您可以通过使用
文件--brief--mime
-来获取mime类型,如果它说“application/zip;charset=binary”,您并不真正关心扩展名是什么,但是如果它说“text/plain;charset=”您可能关心它是
.csv
还是
.txt
或者根本没有扩展名。谢谢。。查看如何操作tst一组4种预定义的文件类型?4如果语句、regexpr、用例或egrep?谢谢,它对单个文件类型有效,但是如何测试4或5个预定义文件类型集,我可以使用“|||”来比较多个集合吗?测试多个扩展名中的一个可以使用
ext=”“${str##*.}”
中的
case${ext text}等。