2009-10-24 24 views
18

Tôi có một danh sách các thư mục chứa dấu cách.Vuốt tất cả các dòng trong một tệp văn bản có dấu ngoặc kép ('cái gì đó')

Tôi cần phải bao quanh chúng bằng '' để đảm bảo rằng tập lệnh theo lô của tôi sẽ hoạt động.

Làm cách nào có thể bao quanh mỗi dòng mới bằng dấu 'và' (dấu ngoặc kép).

ví dụ:

File1:

/home/user/some type of file with spaces 
/home/user/another type of file with spaces 

Để

File2:

'/home/user/some type of file with spaces' 
'/home/user/another type of file with spaces' 
+0

Bạn có cần báo giá các dấu nháy trong chuỗi không? –

+0

Không chỉ xung quanh chuỗi. Bạn biết đấy - vì vậy kịch bản của tôi không thành công khi nó xuất hiện trên một con đường có không gian. – user191960

Trả lời

28

Sử dụng sed?

sed -e "s/\(.*\)/'\1'/" 

Hoặc, như nhận xét dưới đây, nếu các thư mục có thể chứa dấu nháy (cơn ác mộng nếu họ làm) sử dụng thay thế

sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/" 
+0

Lệnh hoạt động hoàn hảo - rõ ràng là nếu có ai sử dụng tệp này trên tệp, hãy thêm nó vào cuối lệnh. – user191960

+2

nếu tên tệp chứa dấu nháy đơn thì sao? – asveikau

+1

Tôi sẽ sửa đổi điều này thành sed -e "s/'/' \\\\ ''/g; s/\ (. * \)/'\ 1' /" – asveikau

4

Sử dụng sed:

sed -i "s/^.*$/'&'/g" filename 
+0

Không làm việc cho tôi Adam - nhận được các lỗi khác nhau tùy thuộc vào tên tập tin cụ thể - có thể cần -e trong đó? –

+0

Khá chắc chắn tôi đã xuất hiện chính xác điều đó vào Cygwin, và nó đã ổn. Có thể đã thực hiện một loại mặc dù. –

3
này

Bạn có thể sử dụng sed(1) để chèn dấu nháy đơn ở đầu và cuối mỗi dòng trong một tệp như vậy:

sed -i~ -e "s/^/'/;s/$/'/" the_file 
2

Logic rất đơn giản, bạn chỉ cần lặp lại dấu ngoặc kép ở phía trước và phía sau.

while read -r line 
do 
    echo "'$line'" 
    # do something 
done < "file" 
+0

Tại sao tất cả những người trả lời và cử tri trước đây đều có khuynh hướng sử dụng sed? Câu hỏi không hỏi. Điều này có hiệu quả không? Tôi không quen thuộc với luồng điều khiển Bash. –

Các vấn đề liên quan