加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 无法使用bash脚本附加到文件

发布时间:2020-12-14 00:43:10 所属栏目:Linux 来源:网络整理
导读:这是我的代码: #!/bin/bash -edirs=( * )for f in "${dirs[@]}"do while IFS= read -r line; do case "$line" in *disabledtrue* ) sed -i '1i "$f"' list.txt;; esac done "$f/config.xml"done 我没有使用sed,而是尝试了echo和printf,但文件list.txt始终
这是我的代码:

#!/bin/bash -e
dirs=( * )
for f in "${dirs[@]}"
do
  while IFS= read -r line; do
     case "$line" in
       *disabled&;true* )
          sed -i '1i "$f"' list.txt;;
     esac
  done < "$f/config.xml"
done

我没有使用sed,而是尝试了echo和printf,但文件list.txt始终是空的.为什么我无法追加档案?

echo "$f" >> list.txt;;
printf '%sn' "$f" >> list.txt;;

测试文件夹下的示例config.xml文件:

<?xml version='1.0' encoding='UTF-8'?>
<project>
<disabled>true</disabled>
</project>

目标:如果test / config.xml中有< disabled> true,则将“test”打印到list.txt中.

解决方法

首先,请注意您的sed表达式不适用于空文件.我修改了代码,它满足了你的目标:

#!/bin/bash -e

for f in */config.xml # process all config.xml files
do
  while IFS= read -r line; do
     case "$line" in
       *disabled&;true* )
          # obtain directory name of the file
          # and append it to list.txt
          dirname "$f" >> list.txt 
     esac
  done < "$f"
done

但是,我宁愿使用以下方法:

#!/bin/bash -e

for f in */config.xml 
do
  # -m1 - exit at first occurence for performance
  if grep -m1 'disabled>true' "$f" >/dev/null; then
      dirname "$f" >> list.txt
  fi
done

甚至更简单:

grep -l 'disabled>true' */config.xml | cut -d/ -f1 > list.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读