sed ด้วยสตริงตามตัวอักษร - ไม่ใช่ไฟล์อินพุต


97

สิ่งนี้ควรจะง่าย: ฉันต้องการเรียกใช้sedกับสตริงตัวอักษรไม่ใช่ไฟล์อินพุต หากคุณสงสัยว่าทำไมตัวอย่างเช่นแก้ไขค่าที่เก็บไว้ในตัวแปรไม่จำเป็นต้องเป็นข้อมูลข้อความ

เมื่อฉันทำ:

sed 's/,/','/g' "A,B,C"

โดยที่ A, B, C คือตัวอักษรที่ฉันต้องการเปลี่ยนเป็น A ',' B ',' C

ฉันเข้าใจ

Can't open A,B,C

ราวกับว่ามันคิดว่า A, B, C เป็นไฟล์

ฉันลองวางท่อเพื่อสะท้อน:

echo "A,B,C" | sed 's/,/','/g' 

ฉันได้รับข้อความแจ้ง

วิธีที่ถูกต้องทำอย่างไร?

คำตอบ:


152

คุณมีข้อขัดแย้งของคำพูดเดียวดังนั้นให้ใช้:

 echo "A,B,C" | sed "s/,/','/g"

หากใช้ คุณสามารถทำได้เช่นกัน ( <<<คือ a here-string):

sed "s/,/','/g" <<< "A,B,C"

แต่ไม่

sed "s/,/','/g"  "A,B,C"

เนื่องจากsedคาดว่าไฟล์จะเป็นอาร์กิวเมนต์

แก้ไข :

ถ้าคุณใช้ หรืออื่น ๆ :

echo string | sed ...

1
แปลกไม่ได้ผลสำหรับฉัน ... โดยตระหนักว่ามันถูกโพสต์เมื่อไม่นานมานี้ แต่การเลิกใช้งานที่แปลกหากนั่นคือปัญหา
ซูเปอร์ฮีโร่


5

เวอร์ชันของฉันโดยใช้ตัวแปรในสคริปต์ทุบตี:

ค้นหาแบ็กสแลชและแทนที่ด้วยเครื่องหมายทับ:

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.