2012-07-13 48 views
76

Tôi đang viết kịch bản lệnh shell cho Linux nhúng trong một hộp công nghiệp nhỏ. Tôi có một biến chứa văn bản pid: 1234 và tôi muốn tách các ký tự X đầu tiên khỏi dòng, vì vậy chỉ còn 1234 ký tự. Tôi có nhiều biến tôi cần phải "sạch", vì vậy tôi cần phải cắt bỏ X ký tự đầu tiên và ${string:5} không hoạt động vì một số lý do trong hệ thống của tôi.Làm cách nào để xóa các ký tự X đầu tiên khỏi chuỗi bằng sed?

Điều duy nhất mà hộp dường như có là sed.

Tôi cố gắng để thực hiện những điều sau đây để làm việc:

result=`echo "$pid" | sed 's/^.\{4\}//g'` 

ý tưởng Bất kỳ?

+6

Nếu '$ {string: 5}' không hoạt động thì bạn không sử dụng Bash hoặc trình bao khác hỗ trợ cú pháp đó. Bạn đang sử dụng shell và phiên bản nào? Shebang của bạn trông như thế nào? Tôi đoán là bạn đang sử dụng 'sh' (như' dấu gạch ngang ') hoặc có thể là 'zsh'. –

Trả lời

17

này sẽ làm công việc quá:

echo "$pid"|awk '{print $2}' 
42

Sử dụng -r tùy chọn ("sử dụng mở rộng biểu thức thông thường trong kịch bản") để sed để sử dụng các {n} cú pháp:

$ echo 'pid: 1234'| sed -r 's/^.{5}//' 
1234 
+1

Cảm ơn bạn, đó là một câu trả lời nhanh chóng! Nó hoạt động! – Kokesh

+1

Làm thế nào nó sẽ được cho trường hợp, nếu tôi muốn để tách các ký tự X cuối cùng từ một chuỗi? – Kokesh

+5

@Kokesh: bạn có thể làm 'sed -r 's /. {5} $ //'' để tách 5 ký tự cuối cùng thay vì –

6

Rất có thể, bạn cũng sẽ có cut. Nếu vậy:

[[email protected]]$ echo "pid: 1234" | cut -d" " -f2 
1234 
+2

Tôi đã thử CUT trước đây, nhưng khả năng bị giới hạn :) – Kokesh

+1

Sự cố với ' cut' là nó không xử lý các dãy của khoảng trống một cách hợp lý, sử dụng 'tr -s ''' để "bóp" các khoảng trống làm cho nó hoạt động tốt hơn. – Thor

+1

Nó không phải là một công cụ tất cả ca hát tất cả; nó là đơn giản và làm như nó nói về có thể và được phổ biến rộng rãi. Nó sẽ làm việc tốt cho các yêu cầu nói trên, và chắc chắn là mạnh mẽ hơn để cắt xén các ký tự cố định từ các vị trí cụ thể. –

125

Sau đây nên làm việc:

var="pid: 1234" 
var=${var:5} 

Bạn có chắc chắn bash là vỏ thực hiện kịch bản của bạn?

+0

Làm việc một điều trị. –

+4

Đây phải là câu trả lời được chấp nhận! – ndmeiri

4

đường ống qua số awk '{print substr($0,42)}' trong đó 42 là nhiều hơn số ký tự cần thả. Ví dụ:

$ echo abcde| awk '{print substr($0,2)}' 
bcde 
$ 
45

Đây là phương pháp ngắn gọn để cắt ký tự X đầu tiên sử dụng cut(1). Ví dụ này loại bỏ 4 ký tự đầu tiên.

echo "$pid" | cut -c 4- 
+1

Đây là giải pháp đơn giản nhất! – Brandon

6

Cắt hai ký tự đầu tiên từ chuỗi:

string="1234567890"; echo "${string:2}" 
+0

Điều này không hoạt động. – luckytaxi

+0

@ dtp70 Cảm ơn rất nhiều câu trả lời chung chung, nó hoạt động rất tốt! – wolfram77

1

Một cách khác, sử dụng cut thay vì sed.

result=`echo $pid | cut -c 5-` 
+0

Anh ta muốn xóa 4 ký tự đầu tiên. Điều này nhận được 4 ký tự đầu tiên. –

+1

Thay đổi mã để sử dụng cắt thay vì đầu. – Evgeny

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