剪切以模式命名的文件中的数字

发布于 2024-12-28 19:42:26 字数 286 浏览 4 评论 0原文

我有以下文件:

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

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

现在我想获取这些文件中的数字。我想将 123、... 存储在循环中的变量内。

我怎样才能实现这个目标?怎样才能把这个数字删掉呢?

PS:我想用 AIX 命令来实现这一点。

I've got the following files:

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

I'm iterating those files in a loop.

Now I want to get the number inside those files. I want to store the 1, 2, 3, … inside a variable in the loop.

How can I achieve this? How can I cut out this number?

P. S.: I want to achieve this with an AIX command.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏尔 2025-01-04 19:42:26

使用 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

Using sed:

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

Using 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

Using awk:

[jaypal:~/Temp] echo "create_file_1.sql" | awk -v FS="[_.]" '{print $(NF-1)}'
1
薔薇婲 2025-01-04 19:42:26

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

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

当然,假设 $FILENAME 保存当前文件名。

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

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

Well ... It depends on how flexible you want it to be. If you can assume that the number is "the part between the second underscore and the first period after the second underscore", you can simply use:

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

assuming that $FILENAME holds the current filename, of course.

This uses cut to first take the string after the second underscore, then cutting that by taking the string leading up to the first period.

This, admittedly, does not use regular expressions which maybe you want based on your tags, but I find the above a bit easier to read for a simple case like this.

誰ツ都不明白 2025-01-04 19:42:26
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
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
眼睛会笑 2025-01-04 19:42:26

如果文件名中的唯一数字是您想要获取的数字,那么这也将起作用

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

If the only number in the file name is the one that you want to get this will also works

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文