在bash脚本中执行cut命令

时间:2017-05-12 08:22:35

标签: linux bash

使用echo打印的每一行都包含给定文件所在目录的正斜杠。我试图使用cut命令剪切正斜杠,但它不起作用。这些文件是gzip压缩的,因此它们具有.gz扩展名。

#!/bin/bash

for filename in /data/logs/2017/month_01/201701*
do
echo $filename
cut $filename -d '/' -f1
done

提前致谢。

2 个答案:

答案 0 :(得分:2)

命令的顺序错误。您需要通过管道(cut)或here-strings(|流式传输输入到<<<命令的字符串。

echo "$filename" | cut  -d '/' -f1

(或)

cut -d '/' -f1 <<<"$filename"

(或)使用here-docs

cut -d '/' -f1 <<EOF
$filename
EOF

数据

并且不要忘记双引号变量以避免shell完成Word-Splitting

答案 1 :(得分:1)

假设文件名为/a/b/c.gz,您只需要c.gz

有两个非常简单的答案:

basename $filename

另一个是:

echo ${filename##*/}

后者使用bash的内置字符串删除参数扩展。

解决问题的另一种方法是,你可以先改变目录,即

#!/bin/bash

pushd /data/logs/2017/month_01
for filename in 201701* 
do
    echo $filename
done
popd

参考:

(编辑:修正了@ 123确定的拼写错误)