我想逐字逐句阅读文本文件。问题:有些单词包含“/ *”。这样的单词会导致脚本返回根目录中的文件。我试过了:
for word in $(< file)
do
printf "[%s]\n" "$word"
done
与echo / cat / etc等几个其他组合...... 对于这个文件:
/* example file
我得到以下输出:
[/bin]
[/cygdrive]
[/Cygwin.bat]
...
[example]
[file]
应该很容易,但它让我疯了。
答案 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]