Làm cách nào để xóa tất cả các dòng trong một tệp bắt đầu bằng "chuỗi" trong sh? Tôi đã suy nghĩ về việc sử dụng lệnh sed.Làm thế nào để bạn xóa tất cả các dòng bắt đầu bằng "chuỗi" trong unix sh?
Trả lời
grep -v '^string' yourfile.txt > stripped.txt
Để làm điều đó tại chỗ, nếu sed của bạn hỗ trợ các tùy chọn -i, bạn có thể làm:
sed -i '/^string/d' input-file
sed đang mong đợi một phần mở rộng tập tin để sao lưu khi sử dụng '-i', trong OS X, bạn phải rất đơn giản, vì vậy hãy sử dụng dấu nháy đơn:' sed -i '' '/^string/d' input-file' –
Trong OSX, 'sed' mặc định thậm chí không hỗ trợ '-i'! Sở thích cá nhân của tôi là không bao giờ sử dụng '-i' và thực hiện chuyển hướng với trình bao. –
Không có '-e' cần thiết? – Mausy5043
sed và grep trong câu trả lời của bạn bị thiếu awk bạn của họ:
awk '!/^string/' inputfile > resultfile
Tôi cần nó nằm trong cùng một tệp – t3hcakeman
Bạn có thể sử dụng Vim ở chế độ Ex:
ex -sc g/^string/d -cx file
g
chọn tất cả các dòng phù hợp vớid
xóax
lưu và đóng
thế nào về hiện của cùng một tập tin? – t3hcakeman
Không thể thực sự làm điều đó với grep. nhưng bạn có thể xuất ra một tệp tạm thời, sau đó là 'mv tempfile origfile'. Nếu bạn muốn chỉnh sửa tại chỗ đúng, thì sed/perl/awk sẽ cần được sử dụng. –
Tôi sẽ sử dụng chúng như thế nào? : D – t3hcakeman