删除以模式命名的文件中的数字
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
我正在循环迭代这些文件。
现在我想获取这些文件中的数字。我想将1
、2
、3
……存储在循环中的一个变量中。
我怎样才能做到这一点?我怎样才能把这个数字删掉?
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
,但因为这是我想提供它作为解决方案的标签之一。 Bash
和 awk
版本只是炫耀! ;)
@BernhardV 对,反向引用是gnu
版本。 awk
或 bash
怎么样?【参考方案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 但它是相同的命令以上是关于删除以模式命名的文件中的数字的主要内容,如果未能解决你的问题,请参考以下文章