Apa itu perintah unix untuk menghapus karakter N pertama dari sebuah baris?

238

Misalnya, saya mungkin ingin:

tail -f logfile | grep org.springframework | <command to remove first N characters>

Saya berpikir bahwa trmungkin memiliki kemampuan untuk melakukan ini, tetapi saya tidak yakin.

les2
sumber

Jawaban:

355

Gunakan cut. Misalnya. untuk menghapus 4 karakter pertama dari setiap baris (yaitu mulai pada karakter ke-5):

tail -f logfile | grep org.springframework | cut -c 5-
iammichael
sumber
1
apakah Anda tahu mengapa pipa itu tidak berfungsi? ketika saya menjalankan perintah itu, 'cut' tidak mencetak hasilnya ke stdout ... jika saya hanya menjalankan 'tail -f logfile | cut -c 5- 'saya bisa melihat hasilnya ... masalahnya harus dengan grep saya menggunakan cygwin FYI terima kasih
les2
apa yang terjadi jika Anda tidak menambahkan pipa terakhir dan memotong? pada dasarnya, jika Anda menghapus bagian terakhir dari baris?
LB40
itu "mengekor" file log, memfilternya dengan grep (yaitu, semua baris dengan "org.springframework" di dalamnya dicetak ke stdout) ketika saya menambahkan pipa ke 'memotong' ... itu hang NAMUN, jika saya menghilangkan 'grep' the 'cut' berfungsi dengan baik ... Saya pikir ada yang salah dengan bagaimana saya menggunakan grep ... bisa menjadi hal yang cygwin juga
les2
1
oh saya mengerti ... mengapa Anda menggunakan ekor? lakukan saja grep logfile org.springframework | cut -c 5- tapi saya pikir sed lebih baik :-)
LB40
6
Masalahnya adalah, grep itu buffering potongan besar sebelum mengirim mereka untuk memotong karena dapat melihat bahwa itu tidak menulis ke terminal. Gunakan grep --line-buffered "org.springframeworkuntuk mengatasi masalah itu.
Steen Schütt
48
sed 's/^.\{5\}//' logfile 

dan Anda mengganti 5 dengan angka yang Anda inginkan ... itu harus melakukan trik ...

Sunting jika untuk setiap baris sed 's/^.\{5\}//g' logfile

LB40
sumber
29

Anda bisa menggunakan cut:

cut -c N- file.txt > new_file.txt

-c: karakter

file.txt: masukan file

new_file.txt: berkas keluaran

N-: Karakter dari N hingga ujung akan dipotong dan di-output ke file baru.

Dapat juga memiliki argumen lain seperti: 'N', 'N-M', '-M' yang berarti karakter ke-n, karakter ke-n, karakter pertama ke karakter ke-13.

Ini akan melakukan operasi ke setiap baris file input.

Ankur
sumber
4
tail -f logfile | grep org.springframework | cut -c 900-

akan menghapus 900 karakter pertama

cut menggunakan 900- untuk menampilkan karakter ke-900 hingga akhir baris

namun ketika saya menyalurkan semua ini melalui grep saya tidak mendapatkan apa-apa

les2
sumber
4
"cut -c 1-900" tidak akan "menghapus 900 karakter pertama" - ini hanya menyisakan 900 karakter pertama. Jika Anda ingin menghapus pertama 900 karakter, gunakan "cut -c 901-"
iammichael
juga itu pertama 900 karakter pada setiap baris, per jawaban @ iammichael ini
Blair Conrad
1
'cut -c 900- "akan menghapus 899 karakter pertama, bukan?
Yiding Zhou
4

Saya pikir awkakan menjadi alat terbaik untuk ini karena dapat menyaring dan melakukan fungsi manipulasi string yang diperlukan pada baris yang difilter:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'

atau

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'
John B
sumber
1

Ini adalah fungsi sederhana, diuji dalam bash. Parameter pertama fungsi adalah string, parameter kedua adalah jumlah karakter yang akan dihapus

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

Pemakaian: masukkan deskripsi gambar di sini

Untuk Kra
sumber
2
Anda dapat menyederhanakan ini untuk menggemakan $ {1: $ 2}
kdubs