如何从输入文件中读取路径

时间:2013-03-21 11:09:03

标签: linux bash shell sh

我有一个txt文件,其中包含xml文件的路径。如果我想从文本文件中读取路径并打印每个xml文件中的选项卡数量,请执行此操作?

这就是我所做的

带路径的txt文件

/home/user/Desktop/softwares/firefox/searchplugins/bing.xml
/home/user/Desktop/softwares/firefox/searchplugins/eBay.xml
/home/user/Desktop/softwares/firefox/searchplugins/answers.xml
/home/user/Desktop/softwares/firefox/searchplugins/wikipedia.xml
/home/user/Desktop/softwares/firefox/blocklist.xml

计算每个文件中标签的代码

代码:

#!/bin/sh
#
FILEPATH=/home/user/Desktop/softwares/firefox/*.xml
for file in $FILEPATH; do
    tabs=$(tr -cd '\t' < $file  | wc -c);
    echo "$tabs tabs in file $file" >> /home/user/Desktop/output.txt
done
echo "Done!"

2 个答案:

答案 0 :(得分:1)

/home/user/Desktop/files.txt包含xml文件列表:

#!/bin/bash

while IFS= read file
do 
    if [ -f "$file" ]; then
       tabs=$(tr -cd '\t' < "$file"  | wc -c);
       echo "$tabs tabs in file $file" >> "/home/user/Desktop/output.txt"
    fi
done < "/home/user/Desktop/files.txt"
echo "Done!"

答案 1 :(得分:0)

sudo_O提供了一个很好的答案。但是,有可能以某种方式,主要是由于文本编辑器的首选项,您的标签被转换为8个连续的空间。如果您希望将它们计为选项卡,则将“tabs”定义替换为:

tabs=$(cat test.xml | sed -e 's/ \{8\}/\t/g' | tr -cd '\t' | wc -c)

完整代码:

#!/bin/sh

# original file names might contain spaces
# FILEPATH=/home/user/Desktop/softwares/firefox/*.xml
# a better option would be
FIREFOX_DIR="/home/user/Desktop/softwares/firefox/"

while read file
do
    if [[ -f "$file" ]] 
    then
        tabs=$(cat test.xml | sed -e 's/ \{8\}/\t/g' | tr -cd '\t' | wc -c)
        echo "$tabs tabs in file $file" >> /home/user/Desktop/output.txt
    fi
done < $FIREFOX_DIR/*.xml

echo "Done!"

但仅当您希望将8个连续空格计为制表符时才适用。

相关问题