Bir satırın ilk N karakterini silmek için unix komutu nedir?


238

Örneğin, şunları yapmak isteyebilirsiniz:

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

Bunun tryapabilme yeteneğine sahip olabileceğini düşünüyordum ama emin değilim.

Yanıtlar:


355

Kullanın cut. Örneğin. her satırın ilk 4 karakterini soymak için (yani 5. karakterden başlayın)

tail -f logfile | grep org.springframework | cut -c 5-

1
borunun neden çalışmadığına dair bir fikrin var mı? Aslında bu komutu çalıştırdığınızda, 'cut' sonuçları stdout'a yazdırmaz ... sadece 'tail -f logfile çalıştırırsam | cut -c 5- 'sonuçları görebiliyorum ... sorun grep ile olmalı cygwin FYI kullanıyorum teşekkürler
les2

son boruyu eklemez ve kesmezseniz ne olur? temel olarak, çizginin son kısmını kaldırırsanız?
LB40

boruyu 'kesmeye' eklediğimde, grep ile filtreleyerek (yani "org.springframework" içeren tüm satırları stdout'a yazdırır) log dosyasını "kuyruklar" ... kaldırırsam HOWEVER 'grep' the 'cut' düzgün çalışıyor ...
grep'i

1
oh anlıyorum ... neden kuyruk kullanıyorsun? sadece grep org.springframework günlük dosyası yapın | kesim -c 5- ama sed sed daha güzel olduğunu düşünüyorum :-)
LB40

6
Sorun şu ki, grep büyük parçaları kesmeye göndermeden önce arabelleğe alıyor, çünkü bir terminale yazılmadığını görebiliyor. grep --line-buffered "org.springframeworkBu sorunu çözmek için kullanın .
Steen Schütt

48
sed 's/^.\{5\}//' logfile 

ve 5'i istediğiniz sayı ile değiştirin ... hile yapmalı ...

DÜZENLE Her satır için sed 's/^.\{5\}//g' logfile


29

Şunları kullanabilirsiniz cut:

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

-c: karakterler

file.txt: giriş dosyası

new_file.txt: çıktı dosyası

N-: Kesilecek ve yeni dosyaya çıktılanacak N'den sonuna kadar olan karakterler.

Ayrıca 'N', 'N-M', '-M' anlamına gelen nth karakter, nth ila mth karakter, sırasıyla birinci ila mth karakter anlamına gelir.

Bu işlem, giriş dosyasının her satırına işlemi gerçekleştirir.


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

ilk 900 karakteri kaldıracaktı

cut 900- karakterini satırın sonuna kadar göstermek için 900-

ancak bütün bunları grep ile paylaştığımda hiçbir şey almıyorum


4
"cut -c 1-900" "ilk 900 karakteri kaldırmaz" - yalnızca ilk 900 karakteri bırakır. İlk 900 karakteri kaldırmak isterseniz, "cut -c 901-" kullanın
iammichael

Ayrıca her satırda ilk @ iammichael'in cevabı başına 900 karakter
Blair Conrad

1
'cut -c 900- "ilk 899 karakteri kaldıracak, değil mi?
Yiding Zhou

4

awkHem filtre hem de filtrelenmiş satırlarda gerekli dize manipülasyon fonksiyonları gerçekleştirmek gibi bunun için en iyi araç olacağını düşünüyorum :

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

veya

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

1

İşte bash'da test edilen basit bir işlev. Fonksiyonun 1. parametresi dize, 2. parametrenin çıkarılacak karakter sayısı

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

Kullanımı: resim açıklamasını buraya girin


2
$ {1: $ 2}
kdubs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.