删除以模式命名的文件中的数字

Posted

技术标签:

【中文标题】删除以模式命名的文件中的数字【英文标题】:Cut out number in files named after a pattern 【发布时间】:2012-02-19 09:41:33 【问题描述】:

我有以下文件:

create_file_1.sql
create_file_2.sql
create_file_3.sql
create_file_4.sql

我正在循环迭代这些文件。

现在我想获取这些文件中的数字。我想将123……存储在循环中的一个变量中。

我怎样才能做到这一点?我怎样才能把这个数字删掉?

P。 S.:我想用 AIX 命令来实现。

【问题讨论】:

【参考方案1】:

使用sed:

[jaypal:~/Temp] echo "create_file_1.sql" | sed 's/.*_\([0-9]\+\)\.sql/\1/'
1

使用bash:

[jaypal:~/Temp] var="create_file_1.sql"
[jaypal:~/Temp] tmp=$var%.*  # Removes the extension
[jaypal:~/Temp] var=$tmp##*_ # Removes portion till the last underscore
[jaypal:~/Temp] echo $var
1

使用awk:

[jaypal:~/Temp] echo "create_file_1.sql" | awk -v FS="[_.]" 'print $(NF-1)'
1

【讨论】:

当我执行你的sed 命令时,我得到create_file_1.sql 作为结果。 @Tichodroma 我不太喜欢sed,但因为这是我想提供它作为解决方案的标签之一。 Bashawk 版本只是炫耀! ;) @BernhardV 对,反向引用是gnu 版本。 awkbash 怎么样?【参考方案2】:

嗯...这取决于您希望它有多灵活。如果您可以假设数字是“第二个下划线和第二个下划线之后的第一个句点之间的部分”,您可以简单地使用:

NUMBER=$(echo $FILENAME | cut -d_ -f3 | cut -d. -f1)

当然,假设$FILENAME 持有当前文件名。

这使用@987654321@首先获取第二个下划线之后的字符串,然后通过获取导致第一个句点的字符串来剪切它。

诚然, 使用正则表达式,这可能是您根据您的标签想要的,但我发现对于像这样的简单情况,上面的内容更容易阅读。

【讨论】:

【参考方案3】:
for filename in create_file_1.sql create_file_2.sql create_file_3.sql create_file_4.sql
do
  i=$(echo $filename | cut -d_ -f3 | cut -d. -f1)
  # do something with $i
done

【讨论】:

【参考方案4】:

如果文件名中唯一的数字是您想要获取的数字,这也可以

for filename in create_file_1.sql create_file_2.sql create_file_3.sql create_file_4.sql ; do
    number=`echo $filename | grep [0-9]* -o`
done

【讨论】:

当使用-o 执行grep 我得到grep: can't open -o 奇怪...尝试使用 --only-matching 但它是相同的命令

以上是关于删除以模式命名的文件中的数字的主要内容,如果未能解决你的问题,请参考以下文章

根据路径中的模式重命名文件

如何从bash中的多个文件名中删除公共前缀模式[重复]

matlab中的m文件可以用中文命名吗,或者用数字?

如何删除临时文件夹中的特定名称模式目录

批处理如何去掉/删除文件名中的指定字符

删除列名中的字符