1

テキストファイルを一語ずつ読みたい。問題: "/*" を含む単語がいくつかあります。このような単語により、スクリプトはルート ディレクトリ内のファイルを返します。私は試した:

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

そして、echo/cat/etc との他のいくつかの組み合わせ... このファイルの場合:

/* example file

次の出力が得られます。

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

簡単なはずですが、それは私を夢中にさせています。

4

4 に答える 4

1

パス名拡張グロブをオフにする必要があります。で新しいシェルを実行して、bash -f再試行してください。http://wiki.bash-hackers.org/syntax/expansion/globsを参照するか、でマンページに飛び込んでman bashくださいman bash | col -b >bash.txt

于 2012-11-25T21:44:38.420 に答える
1

このソリューションについてはどうですか。二重引用符は展開されないようにし、必要に応じて出力をフォーマットするために使用されます$(< file)*sed

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

出力:

[/*] 
[example] 
[file]
于 2012-11-25T21:51:09.930 に答える
0

これはどう?

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

出力:

[/*]
[example]
[file]
于 2012-11-25T22:42:07.200 に答える
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

もう 1 つの方法は、case ステートメントを使用することです。

于 2012-11-25T21:40:25.390 に答える