bash コマンド構文を使用します。
echo "The*quick*brown*fox"|sed s/*/\\n/g
希望の出力を取得します。
The
quick
brown
fox
ただし、スクリプトでは次のようになります。
IN_TXT="The*quick*brown*fox"
OUT_TXT=$(echo $IN_TXT|sed s/*/\\n/g)
echo $OUT_TXT
私は空白になります:
The quick brown fox
私は何が間違っていましたか?
答え1
OUT_TXT
で変数を使用すると、その変数は参照されませんecho
。これにより、シェルは変数の値を空白、タブ、および改行文字単語に変換され、次の引数として提供されますecho
(追加のファイル名ワイルドカード拡張後)。 echo
次に、パラメータ間にスペースを入れて出力します。
常に変数拡張を引用してください。
echo "$OUT_TXT"
またecho $IN_TXT
、変数の拡張子IN_TXT
がとして引用されていない場合、"$IN_TXT"
その値はワイルドカードパターンとして使用され、一致するファイル名に置き換えられます(IN_TXT='*'
例:テストに使用)。
sed
あなたの表現に正しく引用されていないので、同様の問題があります。
また見なさい:
また、コマンドは標準に従ってsed
最もよく書かれています。sed 'y/*/\n/'
sed
できない改行文字を挿入するには、このコマンドを使用しますs///
(GNUsed
は例外です)。sed
コマンドy///
するsed
どの実装を使用しても、単一の文字を改行文字に変更する方法を学びます。
または、単に次tr
のようにコマンドを使用するtr '*' '\n'
か、シェルで高速変数置換を実行できます。
printf '%s\n' "${IN_TXT//\*/ }"
または、
OUT_TXT=${IN_TXT//\*/ }
printf '%s\n' "$OUT_TXT"