Tôi cần xóa văn bản từ một dòng trước khi phân cách.
Ví dụ:
(123434): hello::{apple,orange,mango}.
Tôi cần xóa văn bản trước :
. tức (123434)
.
Có lệnh nào trong linux để thực hiện tác vụ này không?
Tôi cần xóa văn bản từ một dòng trước khi phân cách.
Ví dụ:
(123434): hello::{apple,orange,mango}.
Tôi cần xóa văn bản trước :
. tức (123434)
.
Có lệnh nào trong linux để thực hiện tác vụ này không?
Câu trả lời:
sed
Lệnh này nên thực hiện các mẹo. Lệnh sau sẽ ghi đè lên tệp:
sed -i 's/^[^:]*:/:/' file
Để chỉ in đầu ra, loại bỏ -i
cờ. Để đặt đầu ra trong một tệp mới, xóa -i
cờ và chuyển hướng đầu ra:
sed 's/^[^:]*:/:/' file > new_file
Bạn có thể làm điều này với một lệnh Bash khá đơn giản :
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
Điều này sẽ in : hello::{apple,orange,mango}.
. Bạn có thể cắt tiền tố và hậu tố theo cách tương tự. Hơn nữa, định nghĩa tiền tố và hậu tố có thể chứa ký tự đại diện.
Cắt tiền tố - tối đa khớp với ký tự đại diện tiền tố đầu tiên: ${variable#prefix}
Cắt tiền tố - tối đa khớp với ký tự đại diện tiền tố cuối cùng: ${variable##prefix}
Cắt hậu tố - kết hợp ký tự đại diện hậu tố đầu tiên: ${variable%suffix}
Cắt hậu tố - cho đến cuối trận đấu ký tự đại diện: ${variable%%suffix}
Nó có thể trông không rõ ràng từ cái nhìn đầu tiên, xem ví dụ sau:
mytext="xAxBxAxBx"
echo ${mytext#*A} # will print: xBxAxBx
echo ${mytext##*A} # will print: xBx
echo ${mytext%B*} # will print: xAxBxAx
echo ${mytext%%B*} # will print: xAx
echo ${mytext%%C*} # will print: xAxBxAxBx
Trong ví dụ cuối, mẫu không khớp, vì vậy không có gì bị cắt.
echo ${mytext#*:}:
. Điều này sẽ xử lý đúng các dòng như (123)(434): hello::{apple,orange,mango}.
và 123434: hello::{apple,orange,mango}
.
sed
hoặcawk