Linux 在bash脚本中执行cut命令

Linux 在bash脚本中执行cut命令,linux,bash,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 提前谢谢 命令的顺序是错误的。您需要通过管道(|)或此处字符串(命令顺序错误)将字符串输入流式传输到cut命令。您需要通过

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

#!/bin/bash

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

提前谢谢

命令的顺序是错误的。您需要通过管道(
|
)或此处字符串(
命令顺序错误)将字符串输入流式传输到
cut
命令。您需要通过管道(
|
)或此处字符串(
)将字符串输入流式传输到
cut
命令,建议使用b@lnian cut命令通过管道符号执行echo命令 为了只获取脚本中的文件名,您需要使用

使用-f1选项剪切将获得/之前的第一个值,该值将为空,因此您需要从文件名中获取最后一个值

#!/bin/bash

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

rev命令将文件名反转,这样您将获得文件名的最后一个值,即建议的b@lnian cut命令,通过管道符号与echo命令一起使用 为了只获取脚本中的文件名,您需要使用

使用-f1选项剪切将获得/之前的第一个值,该值将为空,因此您需要从文件名中获取最后一个值

#!/bin/bash

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

rev命令反转文件名,这样您将得到最后一个值,即您的文件名

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

有两个非常简单的答案:

basename $filename
另一个是:

echo ${filename##*/}
后者使用
bash
的内置字符串delete参数扩展

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

#!/bin/bash

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


(编辑:修复了由@123标识的打字错误)

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

有两个非常简单的答案:

basename $filename
另一个是:

echo ${filename##*/}
后者使用
bash
的内置字符串delete参数扩展

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

#!/bin/bash

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


(编辑:由@123标识的固定打字错误)

是否将
echo“$filename”|剪切…
帮助?请给出一个输入和所需输出的示例。是否将
echo“$filename”|剪切…
帮助?请举例说明您的输入和所需的输出。在参数扩展示例中,您可能缺少一个
/
。在参数扩展示例中,您可能缺少一个
/