【发布时间】:2017-09-27 18:53:32
【问题描述】:
我正在尝试提取文件名的一部分 - 日期和后缀之前的所有内容。我不确定在 bashscript 中执行此操作的最佳方法。正则表达式?
名称是文件名的一部分。我正在尝试将其存储在 shellscript 变量中。前缀不会包含奇怪的字符。后缀将是相同的。这些文件存储在一个目录中 - 我将使用循环来提取每个文件的文件名部分。
预期的输入文件:
EXAMPLE_FILE_2017-09-12.out
EXAMPLE_FILE_2_2017-10-12.out
预期提取:
EXAMPLE_FILE
EXAMPLE_FILE_2
尝试:
filename=$(basename "$file")
folder=sed '^s/_[^_]*$//)' $filename
echo 'Filename:' $filename
echo 'Foldername:' $folder
【问题讨论】:
-
folder=sed '^s/_[^_]*$//)' $filename行有三次问题。曾经是因为您省略了 shell 命令周围的$(…);一次是因为您希望sed编辑文件名,而不是文件本身;一次是因为第一个^是不需要的。可行的是folder=$(sed 's/_[^_]*$//)' <<< "$filename")或(不使用此处的字符串)folder=$(echo "$filename" | sed 's/_[^_]*$//)')。如果您精确复制,您可能会收到一条关于找不到命令^s/_[^_*$//)的错误消息。