【发布时间】:2014-02-13 17:12:03
【问题描述】:
我有一个文件夹中的 n 个文件的列表,这些文件具有某种格式。
例如:ABCD.EXXXX.ZZZZ.ZZZZZ.txt
在上面的文件 ABCD.E 中所有文件都是通用的,ZZZZ.ZZZZ 是用户希望字符串,我需要从所有文件中提取 XXXX,需要向用户显示不同的 XXXX .. 有什么方法可以这样做.?帮助我这样做..提前谢谢..
【问题讨论】:
我有一个文件夹中的 n 个文件的列表,这些文件具有某种格式。
例如:ABCD.EXXXX.ZZZZ.ZZZZZ.txt
在上面的文件 ABCD.E 中所有文件都是通用的,ZZZZ.ZZZZ 是用户希望字符串,我需要从所有文件中提取 XXXX,需要向用户显示不同的 XXXX .. 有什么方法可以这样做.?帮助我这样做..提前谢谢..
【问题讨论】:
使用 ls -1 列出相关文件。将其导入 sed 以去除开头的“ABCD.E”。然后再次通过管道将其导入 sed 以删除第一个 '.' 之后的所有内容
ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | sed 's/\..*//'
或者,如果您想要更多地控制输出,您可以使用 awk 执行第二位
ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | awk 'BEGIN{FS="."}{print "value =", $1, "user=", $2"."$3}'
【讨论】:
awk -F"."'{print $2}' filename
您可以尝试打印$1, $2,$3... 以加深对命令的理解。
【讨论】:
您可以在 shell 内部使用 bash/ksh 参数替换 # 和 %。
function get_filename_section {
typeset f=${1:?}
typeset r=${f#ABCD.E}
print ${r%.ZZZZ.ZZZZZ.txt}
}
测试:
[[ $( get_filename_section ABCD.EXXXX.ZZZZ.ZZZZZ.txt ) == XXXX ]] &&
echo ok || echo no
【讨论】: