【问题标题】:shell script looping in folder structure and using awk to print specific pathshell脚本在文件夹结构中循环并使用awk打印特定路径
【发布时间】:2017-07-13 07:11:30
【问题描述】:

我正在使用以下脚本根据年/月/日循环进入目录并获取文件的完整路径,然后回显该文件的 url

dir_proc=/var/data/2017
for month_day in {01..12}/{01..31}; do
    [[ -e $dir_proc/${month_day} ]] || continue
    for file in "$dir_proc/${month_day}/"*; do
        [[ -e $file ]] || continue
    echo "http://msite.com/${file}"
    done
done

我当前输出的示例

http://msite.com/var/data/2017/01/10/file.jpg

当我回显输出时,我正在尝试使用 awk 删除 url 的文件系统路径,url 应该是这样的

http://msite.com/data/2017/01/10/file.jpg

任何调整提示

【问题讨论】:

  • 您基本上希望 http://msite.com/var/data/2017/01/10/file.jpg 成为 http://msite.com/data/2017/01/10/file.jpg ?没有var?
  • 只需使用:echo "http://msite.com/${file#/var}"
  • 那是干净整洁的方式

标签: bash shell awk


【解决方案1】:

awk方法:

$ link="http://msite.com/var/data/2017/01/10/file.jpg"
$ echo "$link" | awk '{gsub("/var/","/")}1'
http://msite.com/data/2017/01/10/file.jpg

或sed方法:

echo "$link" | sed 's#/var/#/#g'
http://msite.com/data/2017/01/10/file.jpg

【讨论】:

  • OP 尚未明确需要更改的内容,但假设需要删除/var/,则可以通过参数扩展轻松完成,无需像 awk/sed 这样的外部工具...
  • 分配变量时,除非需要双引号,否则请使用单引号,这样可以避免解释$、! 等...当需要值时,请使用双引号。a='asd aesd' (不能在评论中显示,两个词之间插入多个空格)看看echo "$a"和echo $a的区别
  • 是的,你是对的,只是提供一种替代方法。
  • 提出建议的解决方案...对于awk 一个,可以使用字符串而不是正则表达式,$0 是默认值.. 所以简化为awk '{gsub("/var/","/")}1'... 对于sed 一个,只需使用不同的分隔符并避免不必要的转义.. sed 's#/var/#/#g'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多