2013-06-28 37 views
12

Tôi có tệp phẳng nơi tôi có nhiều lần xuất hiện các chuỗi chứa dấu nháy đơn, ví dụ: hari'sleader's.Làm cách nào để thay thế các dấu nháy đơn bằng dấu cách trong sed?

Tôi muốn thay thế tất cả các lần xuất hiện của các dấu nháy đơn với không gian, tức là

  • tất cả các lần xuất hiện của hari's-hari s
  • tất cả các lần xuất hiện của leader's để leader s

tôi đã cố gắng

sed -e 's/"'"/ /g' myfile.txt 

sed -e 's/"'"/" "/g' myfile.txt 

nhưng chúng không mang lại kết quả như mong đợi.

Trả lời

32

Cố gắng giữ lệnh sed đơn giản càng nhiều càng tốt hoặc nếu không bạn sẽ bị nhầm lẫn về những gì bạn đã viết sau khi đọc nó sau này.

#!/bin/bash 
sed "s/'/ /g" myfile.txt 
+1

Ngoài ra ... 'tr \ '' ' twalberg

9

Chỉ cần đi lại báo giá duy nhất và đặt một dấu nháy đơn thoát:

sed 's/'\''/ /g' input 

cũng có thể với một biến:

quote=\' 
sed "s/$quote/ /g" input 
+0

Chính xác những gì tôi đang tìm kiếm, cảm ơn. –

16

này sẽ làm những gì bạn muốn

echo "hari's"| sed 's/\x27/ /g' 

Nó sẽ thay thế dấu nháy đơn hiện tại bất cứ nơi nào trong tập tin của bạn/văn bản. Ngay cả khi chúng được sử dụng để trích dẫn chúng sẽ được thay thế bằng dấu cách. Trong trường hợp đó (loại bỏ các dấu ngoặc kép trong một từ không phải ở ranh giới từ), bạn có thể sử dụng như sau:

echo "hari's"| sed -re 's/(\<.+)\x27(.+\>)/\1 \2/g' 

HTH

0

Dưới đây là dựa trên kinh nghiệm của riêng tôi.

Xin lưu ý về cách tôi sử dụng đặc biệt char ' vs " sau sed

này sẽ không làm (không có đầu ra)

2521 #> echo 1'2'3'4'5 | sed 's/'/ /g' 
> 
> 
> 

nhưng này sẽ làm

2520 #> echo 1'2'3'4'5 | sed "s/'/ /g" 
12345 
+0

Tôi đoán một chút giải thích sẽ tốt đẹp. Ngoài ra: Đây thực sự là vấn đề của Solaris hay cái gì khác? (Còn gì nữa?) – Holger

0

Các - tôi nên thay thế nó trong tập tin sed -i 's/"/"/g' filename.txt

nếu bạn muốn sao lưu, bạn có thể làm sed -i.bak 's/"/"/g' filename.txt

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