1文字を2文字に置き換えることはできますか?tr:1文字を2文字に置き換える
"〜"を "〜\ n"に置き換えようとしていますが、出力で改行が生成されません。
$ echo "asdlksad ~ adlkajsd ~ 12345" | tr "~" "~\n"
asdlksad ~ adlkajsd ~ 12345
1文字を2文字に置き換えることはできますか?tr:1文字を2文字に置き換える
"〜"を "〜\ n"に置き換えようとしていますが、出力で改行が生成されません。
$ echo "asdlksad ~ adlkajsd ~ 12345" | tr "~" "~\n"
asdlksad ~ adlkajsd ~ 12345
いいえ、tr
は、特に、単一の文字で、単一の文字を置き換えることを意図された(または、によってコマンドラインオプションでは、文字を削除したり、1つの文字の実行を1回だけ置き換えたりできます。
sed
は、おそらく、この特定の仕事に最適なツールです。
$ echo "asdlksad ~ adlkajsd ~ 12345" | sed 's/~/~\n/g'
asdlksad ~
adlkajsd ~
12345
(これは改行文字としてバックラッシュ-N \n
シーケンスを解釈するためにsed
が必要であることに注意してください「GNUのSEDは、これを行いますが、POSIXはdoesnの。 。tは、正規表現内を除いて、それを指定して、とそうでないsed
の古いバージョンは間違いなくあります)
いいえ、申し訳ありません。
tr
は、ある文字を別の文字と訳したいという意味です。
は、数多くのオプションがありますが、私はすなわち、awk
使用することになり
echo "asdlksad ~ adlkajsd ~ 12345" | awk '{gsub(/[~]/, "&\n")};1'
出力
asdlksad ~
adlkajsd ~
12345
は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を行うことができます。ここで
純粋バッシュを使ってことを行うための一つの方法です:
s='"asdlksad ~ adlkajsd ~ 12345'
r=$'~\n'
echo -e "${s//\~/$r}"
asdlksad ~
adlkajsd ~
12345
echo "asdlksad ~ adlkajsd ~ 12345" | sed 's/~/~|/g' | tr '|' '\n'
sedのため、 - このは、\ nは
を交換し、問題を持つ、完璧に動作します