次の形式の文字列があります。
string1:string2:string3:string4:string5
sed
を使用して:
で文字列を分割し、各サブ文字列を新しい行に出力しようとしています。ここに私がやっていることがあります:
cat ~/Desktop/myfile.txt | sed s/:/\\n/
これは印刷します:
string1
string2:string3:string4:string5
区切り文字ごとに分割するにはどうすればよいですか?
GNU sedで区切り文字を使用して文字列を分割するには、次のようにします。
sed 's/delimiter/\n/g' # GNU sed
たとえば、:
を区切り文字として使用して分割するには:
$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you
または、GNU以外のsedの場合:
$ sed $'s/:/\\\n/g' <<< "he:llo:you"
he
llo
you
この特定のケースでは、置換後にg
を見逃しました。したがって、一度だけ実行されます。見る:
$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5
g
はg
lobalの略で、置換はグローバルに、つまりすべての発生に対して行われる必要があることを意味します。デフォルトが1であり、たとえば2を指定すると、2回実行されるなどのことを確認してください。
すべて一緒に、あなたの場合には、使用する必要があります:
sed 's/:/\\n/g' ~/Desktop/myfile.txt
不要なパイピングsed ... file
の代わりに、cat file | sed
構文を直接使用できることに注意してください。
sed
で\n
を使用することは移植できません。 sed
で必要なことを行うポータブルな方法は次のとおりです。
sed 's/:/\
/g' ~/Desktop/myfile.txt
しかし、実際にはこれはsed
の仕事ではありません。とにかく、tr
の仕事です:
tr ':' '
' < ~/Desktop/myfile.txt
これはあなたのために働くかもしれません(GNU sed):
sed 'y/:/\n/' file
多分:
sed y/:/$"\n"/ file
これはそれを行う必要があります:
cat ~/Desktop/myfile.txt | sed s/:/\\n/g
Gnu sedを使用している場合、改行に\x0A
を使用できます。
sed 's/:/\x0A/g' ~/Desktop/myfile.txt