2012-11-25 87 views
1

我想逐字閱讀文本文件。問題:有一些單詞包含「/ *」。這樣一個詞使腳本在根目錄中返回文件。我想:Cygwin bash:逐字閱讀文件

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

並多次與回聲/貓的/ etc ... 其他組合對於本文件:

/* example file 

我獲得以下的輸出:

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

應該很容易但是這使我瘋狂。

回答

1

您需要關閉路徑擴展通配。用bash -f運行一個新的shell並重試。請參閱http://wiki.bash-hackers.org/syntax/expansion/globs或者跳至man bash的聯機幫助頁面,也可以撥打man bash | col -b >bash.txt

+0

'set -o noglob'爲我工作,謝謝 – Mixer

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 

另一種方法是使用一個case語句

+0

無用的使用貓的發現! –

1

這個怎麼樣的解決方案,圍繞$(< file)雙引號阻止正在擴大*sed用於格式輸出的要求:

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

輸出:

[/*] 
[example] 
[file] 
0

這件怎麼樣?

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

輸出:

[/*] 
[example] 
[file]