Perintah apa yang dapat saya gunakan untuk membagi input seperti ini:
foo:bar:baz:quux
dalam hal ini?
foo
bar
baz
quux
Saya mencoba mencari tahu cut
perintahnya tetapi sepertinya hanya berfungsi dengan jumlah input tetap, seperti "1000 karakter pertama" atau "7 bidang pertama". Saya perlu bekerja dengan input panjang yang sewenang-wenang.
shell
text-processing
japreiss
sumber
sumber
tr : '\n' < input
?Jawaban:
Ada beberapa opsi:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Anda juga dapat melakukan ini dengan murni
bash
:sumber
\n
string pengganti seperti itu akan berfungsi di GNU sed, tetapi akan gagal di sebagian besar implementasi sed lainnya.sumber
Jika grep
-o
Anda mendukung, Anda dapat melakukannya seperti ini:Atau dengan awk, atur pemisah rekaman ke
:
:Atau dengan potongan GNU:
Edit
Seperti dicatat oleh Chris di bawah ini, ini akan meninggalkan baris baru, ini dapat dihindari jika dukungan awk Anda menentukan
RS
sebagai ekspresi reguler (diuji dengan GNU awk):sumber
awk
Contoh Anda akan meninggalkan baris baru (mungkin tidak diinginkan).Dalam beberapa string saya punya masalah dengan solusi di atas. Tetapi ini berhasil bagi saya:
sumber