2015-01-06 17 views
5

Tôi đang tìm cách xóa từ cuối cùng của một dòng trong trình bao! Tôi sử dụng sed nhưng tôi chỉ tìm thấy cách xóa từ lase của mỗi dòng, nhưng không phải là một dòng xác định. Ví dụ: Tôi có một tập tin test.dbXóa từ cuối cùng của một dòng trong shell

key1 value1 
key2 value2 
key3 value3 

Và tôi chỉ muốn xóa value3

sed -i s/'\w*$'// test.db 

Dòng này chỉ cần xóa từ cuối cùng của mỗi dòng!

+0

Làm thế nào để bạn muốn chỉ định dòng để xóa từ cuối cùng từ đâu? – lurker

+0

jus cung cấp số dòng cho s của bạn, ví dụ cho dòng đầu tiên nó sẽ là: sed -i 1s/'\ w * $' // test.db – tinySandy

Trả lời

2

Nếu bạn muốn xóa từ cuối cùng chỉ tắt của dòng cuối cùng, sau đó bạn có thể sử dụng:

sed -i '$s/\w*$//' test.db 

Nếu bạn muốn xóa từ cuối cùng từ dòng cho key3:

sed -i '/key3/s/\w*$//' test.db 
+0

Tại sao sử dụng dấu ngoặc kép để bao quanh sed của bạn lệnh có các tác dụng phụ khi sử dụng shell tức là '\ $'. Dấu nháy đơn sẽ làm cho lệnh rõ ràng hơn nhiều. – potong

+0

@potong thực sự, cảm ơn vì đã chỉ ra điều đó. – lurker

2

Hãy thử điều này:

sed -i '1{s/[^ ]\+\s*$//}' file test.db 
+0

Đối với dòng đầu tiên –

1

Xóa từ cuối cùng của dòng của bạn

kể từ khi bạn đang nhắm mục tiêu dòng key3 value3

sed -i '/key3 value3/s/\S*$//' test.db 

nơi \ S là đại diện cho một chữ số đó không phải là một không gian hoặc khoảng trắng.

Xóa từ cuối cùng của một dòng cụ thể (quy tắc chung)

sed -i '/line pattern/s/\S*$//' test.db 

dòng mẫu đại diện cho một mô hình được tìm thấy trên dòng mà bạn muốn nhắm mục tiêu

0

Điều này có thể làm việc cho bạn (GNU sed):

sed -r '$s/(\s*)\S+(\s*)$/\1\2/' file 

điều này sẽ xóa mã thông báo không gian cuối cùng khỏi dòng cuối cùng (giữ bất kỳ khoảng trắng xung quanh nào) át chủ).

Để loại bỏ xung quanh khoảng trắng cũng sử dụng:

sed -r '$s/\s*\S+\s*$//' file 
2

Dưới đây là một awk để loại bỏ trường cuối cùng:

echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1' 
one two 
Các vấn đề liên quan