2009-06-09 41 views

Trả lời

206

Sử dụng cut. Ví dụ. tước 4 ký tự đầu tiên của mỗi dòng (tức là bắt đầu vào char thứ 5):

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

bạn có biết tại sao ống không hoạt động không? khi tôi chạy về cơ bản lệnh đó, 'cắt' không in kết quả để stdout ... nếu tôi chỉ cần chạy 'tail -f logfile | cắt -c 5- 'tôi có thể thấy kết quả ... vấn đề phải có grep Tôi đang sử dụng cygwin FYI cảm ơn – les2

+0

điều gì sẽ xảy ra nếu bạn không thêm ống cuối cùng và cắt? về cơ bản, nếu bạn loại bỏ phần cuối của dòng? – LB40

+0

nó "tails" logfile, lọc nó với grep (tức là tất cả các dòng có "org.springframework" trong chúng được in thành stdout) khi tôi thêm đường ống vào 'cắt' ... nó treo BAO GIỜ, nếu tôi loại bỏ 'grep' các 'cắt' hoạt động đúng ... tôi đang nghĩ điều gì đó sai với cách tôi đang sử dụng grep ... có thể là một điều Cygwin quá – les2

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

sẽ loại bỏ 900 ký tự đầu tiên

cut sử dụng 900- để hiển thị các nhân vật thứ 900 đến hết dòng

tuy nhiên khi tôi ống tất cả điều này thông qua grep Tôi không nhận được bất cứ điều gì

+4

"cắt -c 1-900" sẽ không "tháo 900 ký tự đầu tiên" - - nó sẽ chỉ để lại 900 ký tự đầu tiên.Nếu bạn muốn xóa 900 ký tự đầu tiên, hãy sử dụng "cut -c 901-" – iammichael

+0

cũng là 900 ký tự đầu tiên trên mỗi dòng, theo câu trả lời của @ iammichael –

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

và bạn thay thế 5 bởi số bạn muốn ... nó nên làm các trick ...

EDIT nếu cho mỗi dòng sed 's/^.\{5\}//g' logfile

+0

nên thay vì' sed' s/^. \ {, 5 \} // 'logfile' – user3719454

12

Bạn có thể sử dụng cut:

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

-c: ký tự

file.txt: tập tin đầu vào

new_file.txt: file output

N-: nhân vật từ N đến kết thúc để được cắt và đầu ra cho tập tin mới.

Cũng có thể có các arg khác như: 'N', 'N-M', '-M' có nghĩa là ký tự thứ n, thứ n đến mth ký tự, đầu tiên là ký tự thứ m tương ứng.

Thao tác này sẽ thực hiện thao tác với từng dòng của tệp đầu vào.

+4

Sử dụng vô ích 'cat',' cut file.txt -cN-> new_file.txt' cũng sẽ hoạt động – ChrisWue

1

Tôi nghĩ awk sẽ là công cụ tốt nhất cho việc này vì nó có thể vừa lọc và thực hiện các chức năng chuỗi thao tác cần thiết trên dây chuyền lọc:

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

hoặc

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

Đây là chức năng đơn giản, thử nghiệm trong bash. 1st param chức năng là chuỗi, 2nd param là số ký tự để bị tước

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

Cách sử dụng: enter image description here

Các vấn đề liên quan