【问题标题】:compare a substring of variable with another string in unix将变量的子字符串与unix中的另一个字符串进行比较
【发布时间】:2017-10-25 02:20:13
【问题描述】:

我是 Unix 的初学者。如果这个问题听起来太蹩脚,我很抱歉。

我将向变量fullstring=$1 传递一个参数。此变量的输入可能类似于这些选项,例如 tester.txt 或 tester.sh 或 testapiece.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 子句中比较条件,那将会很有帮助。提前致谢。

注意:我们可以将文字 * 作为文件类型传递,它应该与 * 进行字面比较

【问题讨论】:

  • 您可能需要基本名称而不是正则表达式。而且您绝对应该编写一个程序来尝试解决问题,然后在遇到问题时询问——stackoverflow 不是请求编写算法的平台。
  • 你想用 Bash 写这个吗?别的壳?标签缺少一种语言。
  • 我想用 KSH 写这段代码
  • 嗨,斯科特·约翰逊,我很抱歉。它实际上是我编写的一个更大的代码,这个 IF 条件是我无法在其中实现的完整代码的一部分。我不确定我是否可以提供完整的代码。所以我只是提供了我正在寻找的更多细节。我肯定会尝试实现这一点,但无法修复它,因此请联系您的 stackoverflow 专家建议。谢谢
  • 文件扩展名只是约定...文本文件不需要具有.txt扩展名,.zip可能意味着不止一件事,等等. 您可以/应该先检查实际类型,如果需要,然后检查扩展名。您可以使用file --brief --mime <filename> 获取 mime 类型 — 如果它显示“application/zip; charset=binary”,您并不真正关心扩展名是什么,但如果它显示“text/plain; charset=” " 你可能会关心它是 .csv 还是 .txt 或者根本没有扩展名。

标签: regex unix sed grep ksh


【解决方案1】:

它是这样工作的:

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

${str##*.} 是所谓的参数扩展。在此处查找更多信息:http://www.informit.com/articles/article.aspx?p=99035&seqNum=3

【讨论】:

  • 谢谢.. 调查一下
  • OP 应该如何测试一组 4 种预定义文件类型? 4 个 if 语句、正则表达式、用例还是 egrep?
  • 谢谢,它适用于单一文件类型,但如何测试 4 或 5 个预定义文件类型的集合,我可以使用 '||'比较多组
  • 测试多个扩展之一可以使用 case statement ext=""${str##*.}" ... case ${ext} in ...txt) ... zip) 等。
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多