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.