Saya melakukan grep dan sed dan saya mendapatkan 2 baris file yang saya minati. Bagaimana saya bisa mendapatkan baris-baris ini dalam satu baris yang berakhir dengan karakter baris baru?
Sekarang saya mendapatkan:
pattern1
pattern2
Saya ingin mendapatkan pattern1 pattern2 \n
printf %s\\n pattern1 pattern2 | sed '$!N;s/\n/ /'
Jawaban:
paste
:Yang mengatakan: "baca baris dari stdin (yang pertama
-
), baca baris lain dari stdin (yang kedua-
), lalu gabung dengan mereka dengan spasi"teknik khusus bash:
ref: http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile
sumber
- -
? Apakah perintahnya seperti itu?paste
Anda bagaimana Anda ingin memproses input. 2 sekaligus. Tambahkan lebih banyak untuk dilakukan 3 sekaligus.seq 10 | paste -d " " - -
.Saya akan meletakkan tiga versi metode yang berbeda berturut-turut
AWK
SED
TR
Dan masih banyak lagi.
sumber
tr
solusi akan menelan baris baru berakhir, sehingga Anda mungkin ingin menambahkan; echo
ke salah satu yangAnda bisa melakukannya menggunakan skrip shell atau di command-line, cukup masukkan output dari perintah dalam variabel lalu
echo
:sumber
*
atau?
) dalam hasilnya, nilainya dapat berubah.$()
.. dan menggunakan printfprintf '%s\n' "$x"
printf '%s\n' "$x"
TIDAK akan menghapus baris "internal".Dengan
sed
, Anda dapat melakukan ini:N;
memberitahused
untuk menambahkan baris berikutnya ke dalam ruang pola, jadi sekarangsed
bekerja dengan kedua baris.s/\n/ /
mengganti karakter baris baru dengan spasi, "menggabungkan" dua baris bersama.sumber
Cara sederhana, output pipa ke
xargs
:Ini hanya berfungsi dengan ouput kecil, karena dibatasi oleh karakter maksimum per baris perintah. Nilai terbesar tergantung pada sistem, Anda bisa mendapatkan nilai ini menggunakan
getconf ARG_MAX
.sumber
IFS akan dengan senang hati memakannya jika Anda mau.
sumber
bungkus sed / grep Anda di backticks
ketika perintah awal Anda adalah:
perintah baru Anda adalah:
Tidak mendapatkan spasi di antara garis, tetapi Anda selalu dapat menempel pada pipa sed lain:
sumber