cal*_*223 0 scripting shell-script
您好,我目前正在尝试执行以下代码。我在变量 DATE 中存储了一个字符串,其格式为 YYYY/MM/DD。我尝试使用 cut 命令提取年份。我收到一条错误消息,指出它不是文件或目录。我可以进行修改或采取不同的方法吗?
for file in ~/filesToSort/*
do
DATE=$(head -1 $file | tr "-" "/")
echo "${DATE}"
YYYY=$(cut -c1-4 accounts $DATE)
#echo "${YYYY}"
done
Run Code Online (Sandbox Code Playgroud)
谢谢
该cut
实用程序从其标准输入流读取数据,它不会对作为参数给出的字符串进行操作。
因此,要使用cut
,您需要在标准输入上传递数据:
YYYY=$( printf '%s\n' "$DATE" | cut -d '/' -f 1 )
Run Code Online (Sandbox Code Playgroud)
然而,这在循环中会非常慢。相反,使用内置参数替换来删除字符串/
中第一个之后的所有内容$DATE
:
YYYY=${DATE%%/*}
Run Code Online (Sandbox Code Playgroud)
$DATE
这会删除与shell 模式匹配的最长后缀字符串/*
。如果字符串是2021/10/21
,则返回2021
。
要获取目录中每个文件的前四个字符(这是我相信您当前代码尝试执行的操作的本质),您可以sed
像这样使用:
for name in "$HOME"/filesToSort/*; do
sed -e 's/\(....\).*/\1/' -e q "$name"
done
Run Code Online (Sandbox Code Playgroud)
这会读取每个文件的第一行,用该行的前四个字符替换该行的内容,然后将结果输出到终端后退出。