Trは1文字を2文字に置き換えることができますか?
「〜」を「〜\ n」に置き換えようとしていますが、出力で改行が生成されません。
$ echo "asdlksad ~ adlkajsd ~ 12345" | tr "~" "~\n"
asdlksad ~ adlkajsd ~ 12345
いいえ、tr
は、特に、単一の文字を単一の文字に置き換えることを目的としています(または、コマンドラインオプションに応じて、文字を削除したり、単一の文字の実行を1回だけ置換したりします)。
sed
は、おそらくこの特定のジョブに最適なツールです。
$ echo "asdlksad ~ adlkajsd ~ 12345" | sed 's/~/~\n/g'
asdlksad ~
adlkajsd ~
12345
(これには、バックスラッシュn \n
シーケンスを改行文字として解釈するためにsed
が必要であることに注意してください。GNU sedはこれを行いますが、 [〜#〜] posix [〜 #〜] は正規表現内を除いて指定しません。また、指定しないsed
の古いバージョンは間違いなくあります。
あなたはawkで行くことができます、FS/OFS変数があなたのために仕事をするようにしてください:
awk -F'~' -v OFS="~\n" '$1=$1'
あなたの例でテストしてください:
kent$ awk -F'~' -v OFS="~\n" '$1=$1' <<< "asdlksad ~ adlkajsd ~ 12345"
asdlksad ~
adlkajsd ~
12345
tr
は1対1の変換のみを実行できます。
これを行う1つの方法を次に示します純粋なBashを使用:
s='"asdlksad ~ adlkajsd ~ 12345'
r=$'~\n'
echo -e "${s//\~/$r}"
asdlksad ~
adlkajsd ~
12345
できません、ごめんなさい。
tr
は、ある文字を別の文字に音訳することを意味します。
多数のオプションがありますが、awk
を使用します。
echo "asdlksad ~ adlkajsd ~ 12345" | awk '{gsub(/[~]/, "&\n")};1'
出力
asdlksad ~
adlkajsd ~
12345
echo "asdlksad ~ adlkajsd ~ 12345" | sed 's/~/~|/g' | tr '|' '\n'
--sedは\ nの置換に問題があるため、これは完璧に機能します。