2009-06-23 1 views

Trả lời

34

Nếu chuỗi được lưu trữ trong một biến gọi là $ str, thì điều này sẽ giúp bạn có được cung cấp cho bạn các chuỗi con mà không có 20 chữ số cuối cùng trong bash

${str:0:${#str} - 20} 

về cơ bản, chuỗi cắt có thể được thực hiện bằng

${[variableName]:[startIndex]:[length]} 

và chiều dài của một chuỗi là

${#[variableName]} 

EDIT:giải pháp bằng cách sử dụngsed mà làm việc trên các tập tin:

sed 's/.\{20\}$//' < inputFile 
+4

'$ {str :: - 20}}' là đủ. –

1

Trong ${parameter/pattern/string} cú pháp trong bash, mẫu là một mô hình con đường wildcard-phong cách, không phải là một biểu thức chính quy. Trong cú pháp ký tự đại diện, một dấu chấm . chỉ là dấu chấm và dấu ngoặc nhọn được sử dụng để khớp với một lựa chọn các tùy chọn (như đường ống | trong cụm từ thông dụng), để dòng đó chỉ xóa chuỗi chữ số ".20".

+0

Cảm ơn bạn đã giải thích, nhưng dường như chỉ có một câu trả lời có thể được chấp nhận, xin lỗi :) – jaimechen

1

Có một số cách để thực hiện tác vụ cơ bản.

$ str="qa_sharutils-2009-04-22-15-20-39" 

Nếu bạn muốn bỏ qua 20 ký tự cuối cùng. Lựa chọn chuỗi con này là số không dựa trên:

$ echo ${str::${#str}-20} 
qa_sharutils 

"%" và "%%" để tách từ phía bên tay phải của chuỗi. Ví dụ: nếu bạn muốn tên cơ sở, trừ bất kỳ thông tin nào theo sau "-":

$ echo ${str%%-*} 
qa_sharutils 
+2

'echo" $ {str :: - 20} "' là đủ. –

0

chỉ khi 20 byte cuối cùng của bạn luôn là ngày.

$ str="qa_sharutils-2009-04-22-15-20-39" 
$ IFS="-" 
$ set -- $str 
$ echo $1 
qa_sharutils 
$ unset IFS 

hoặc khi dấu gạch ngang và dấu gạch ngang đầu tiên là không cần thiết.

$ echo ${str%%-*} 
qa_sharutils 
2

sử dụng awk:

echo $str | awk '{print substr($0,1,length($0)-20)}' 

hoặc sử dụng chuỗi thao tác - echo $ {string: Vị trí: chiều dài}:

echo ${str:0:$((${#str}-20))} 
+1

'echo" $ {str :: - 20} "' là đủ. –

1

tương tự như substr ('abcdefg', 2-1 , 3) trong php:

echo 'abcdefg'|tail -c +2|head -c 3