ฉันต้องการลบข้อความออกจากบรรทัดก่อนตัวคั่น
ตัวอย่างเช่น:
(123434): hello::{apple,orange,mango}.
:
ฉันต้องการที่จะลบข้อความก่อนเป็นครั้งแรก (123434)
กล่าวคือ
มีคำสั่งใดใน linux ที่จะทำงานนี้หรือไม่?
ฉันต้องการลบข้อความออกจากบรรทัดก่อนตัวคั่น
ตัวอย่างเช่น:
(123434): hello::{apple,orange,mango}.
:
ฉันต้องการที่จะลบข้อความก่อนเป็นครั้งแรก (123434)
กล่าวคือ
มีคำสั่งใดใน linux ที่จะทำงานนี้หรือไม่?
คำตอบ:
sed
คำสั่งนี้ควรทำเคล็ดลับ คำสั่งต่อไปนี้จะเขียนทับไฟล์:
sed -i 's/^[^:]*:/:/' file
หากต้องการพิมพ์เอาต์พุตให้ลบ-i
แฟล็ก หากต้องการวางเอาต์พุตในไฟล์ใหม่ให้ลบ-i
แฟล็กและเปลี่ยนทิศทางเอาต์พุต:
sed 's/^[^:]*:/:/' file > new_file
คุณสามารถใช้cut
:
echo '(123434): hello::{apple,orange,mango}.' | cut -d: -f2-
คุณสามารถทำได้ด้วยคำสั่งBash ที่ค่อนข้างง่าย:
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
: hello::{apple,orange,mango}.
นี้จะพิมพ์ คุณสามารถตัดคำนำหน้าและคำต่อท้ายด้วยวิธีเดียวกัน ยิ่งกว่านั้นคำจำกัดความคำนำหน้าและคำต่อท้ายสามารถมีอักขระตัวแทน
ตัดคำนำหน้า - จับคู่ไวด์การ์ดของคำนำหน้าสูงสุด: ${variable#prefix}
ตัดคำนำหน้า - ตรงกับสัญลักษณ์ตัวแทนที่ตรงกันทั้งหมด: ${variable##prefix}
ตัดส่วนต่อท้าย - ตรงกับสัญลักษณ์ตัวแทนต่อท้ายแรก: ${variable%suffix}
ตัดส่วนต่อท้าย - สูงสุด wildcard ต่อท้ายที่ตรงกัน: ${variable%%suffix}
มันอาจดูไม่ชัดเจนตั้งแต่แรกเห็นดูตัวอย่างต่อไปนี้:
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
ในตัวอย่างที่ผ่านมารูปแบบไม่ตรงกันดังนั้นจึงไม่มีอะไรถูกตัดออก
echo ${mytext#*:}:
มันต้องการจะมีประสิทธิภาพมากขึ้นในการใช้งาน นี้อย่างถูกต้องจะจัดการกับสายเหมือนและ(123)(434): hello::{apple,orange,mango}.
123434: hello::{apple,orange,mango}
sed
หรือawk