Cygwin bash:逐字阅读文件

时间:2012-11-25 21:27:08

标签: linux bash shell unix cygwin

我想逐字逐句阅读文本文件。问题:有些单词包含“/ *”。这样的单词会导致脚本返回根目录中的文件。我试过了:

for word in $(< file)
do
    printf "[%s]\n" "$word"
done

与echo / cat / etc等几个其他组合...... 对于这个文件:

/* example file

我得到以下输出:

[/bin]
[/cygdrive]
[/Cygwin.bat]
...
[example]
[file]

应该很容易,但它让我疯了。

4 个答案:

答案 0 :(得分:1)

您需要关闭路径名扩展通配。使用bash -f运行新shell,然后重试。请参阅http://wiki.bash-hackers.org/syntax/expansion/globs或深入了解man bash的联系人页面,也许可以man bash | col -b >bash.txt

答案 1 :(得分:1)

此解决方案如何,$(< file)停止*周围的双引号被展开并使用sed根据需要格式化输出:

for word in "$(< file)" 
do
    echo "$word" | sed -E 's/(\S*)(\s)/[\1]\2\n/g'
done

输出:

[/*] 
[example] 
[file]

答案 2 :(得分:0)

这可能会有所帮助;

# skip blank lines and comment lines begining with hash (#)

cat $CONFIG_FILE | while read LINE
  do
  first_char=`echo $LINE | cut -c1-1`
  if [ "${first_char}" = "#" ] 
   then
      echo "Skip line with first_char=  >>${first_char}<<"
   else
     :
     echo "process line:  $LINE"  ;
   fi

done

另一种方法是使用案例陈述

答案 3 :(得分:0)

这个怎么样?

while read -a a; do printf '[%s]\n' "${a[@]}"; done < file

输出:

[/*]
[example]
[file]