Regex 在unix中将变量的子字符串与另一个字符串进行比较
我是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
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}等。