sed bash スクリプトが予期せず文字を改行ではなく空白に置き換えます。

sed bash スクリプトが予期せず文字を改行ではなく空白に置き換えます。

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"

おすすめ記事