首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash脚本中执行cut命令

在bash脚本中执行cut命令
EN

Stack Overflow用户
提问于 2017-05-12 16:22:35
回答 3查看 1.5K关注 0票数 0

使用回显打印的每一行都包括给定文件所在目录的正斜杠。我正在尝试使用cut命令来剪切正斜杠,但它不起作用。这些文件是用gzipped压缩的,所以它们的扩展名是.gz。

代码语言:javascript
运行
复制
#!/bin/bash

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

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-05-12 16:31:10

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

代码语言:javascript
运行
复制
echo "$filename" | cut  -d '/' -f1

(或)

代码语言:javascript
运行
复制
cut -d '/' -f1 <<<"$filename"

(或)使用此处-docs

代码语言:javascript
运行
复制
cut -d '/' -f1 <<EOF
$filename
EOF

数据

不要忘了用双引号将变量括起来,以避免外壳执行Word-Splitting

票数 2
EN

Stack Overflow用户

发布于 2017-05-12 16:56:44

假设文件名是/a/b/c.gz,你只是想要c.gz

有两个非常简单的答案:

代码语言:javascript
运行
复制
basename $filename

另一种是:

代码语言:javascript
运行
复制
echo ${filename##*/}

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

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

代码语言:javascript
运行
复制
#!/bin/bash

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

参考资料:

  • http://wiki.bash-hackers.org/syntax/pe

(编辑:修复了@123标识的拼写错误)

票数 1
EN

Stack Overflow用户

发布于 2017-05-12 16:47:43

正如建议的那样,b @lnian命令通过管道符号与echo命令一起使用,以便只获取您需要使用的脚本的文件名。

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

代码语言:javascript
运行
复制
#!/bin/bash

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43932854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档